Android – установите фокус на EditText после выбора Spinner

На экране отображаются следующие элементы:

EditText Forename Spinner gender selection (Male | Female) EditText Email 

Когда приложение запускается впервые, я хочу, чтобы фокус был установлен в Forename EditText. Затем после того, как в «Spinner» было выбрано «Male» или «Female», я хочу, чтобы фокус был установлен на Email EditText, который находится ниже счетчика.

Я использовал setOnItemSelectedListener для установки requestFocus в электронном requestFocus EditText, но проблема в том, что он автоматически устанавливает фокус на этом EditText всякий раз, когда я запускаю приложение. Это происходит потому, что по умолчанию счетчик отображает первый выбор, который в этом случае является «мужским», и поэтому он считает, что выбор уже сделан и задает фокус на поле «Электронная почта».

Я не возражаю против того, что первый выбор уже выбран по умолчанию в spinner, но если бы я мог каким-то образом переопределить requestFocus должен быть установлен в Forename EditText изначально, это было бы здорово.

XML:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/ForenameForm" android:layout_width="285dp" android:layout_height="65dp" android:hint="@string/forenameHint" android:lines="1" android:singleLine="true" android:textSize="20sp" > </EditText> <Spinner android:id="@+id/SpinnerGender" android:spinnerMode="dialog" android:textSize="30sp" android:layout_width="285dp" android:layout_height="60dp" android:prompt="@string/spinnerGender" android:entries="@array/genderList"> </Spinner> <EditText android:id="@+id/EmailForm" android:layout_width="285dp" android:layout_height="65dp" android:hint="@string/emailHint" android:lines="1" android:singleLine="true" android:textSize="20sp" > </EditText> </LinearLayout> 

Класс деятельности:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText forename=(EditText)findViewById(R.id.ForenameForm); forename.requestFocus(); final EditText email=(EditText)findViewById(R.id.EmailForm); Spinner spinner=(Spinner)findViewById(R.id.SpinnerGender); spinner.setFocusable(true); spinner.setFocusableInTouchMode(true); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { email.requestFocus(); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } 

Solutions Collecting From Web of "Android – установите фокус на EditText после выбора Spinner"

Как насчет этого решения.

 define a boolean flag and set it default false. in oncreate set the focus of forname in setOnItemSelectedListener if flag is false then set flag true else focus email 

Таким образом, ваш код будет похож на

 boolean flag = false; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText forename=(EditText)findViewById(R.id.ForenameForm); forename.requestFocus(); final EditText email=(EditText)findViewById(R.id.EmailForm); Spinner spinner=(Spinner)findViewById(R.id.SpinnerGender); spinner.setFocusable(true); spinner.setFocusableInTouchMode(true); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // changes here if(flag == false) flag = true; else email.requestFocus(); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); }