2013-04-23 13 views
6

Mam następujące elementy wyświetlane na ekranie:Android - ustawić ostrość na EditText po wyborze Spinner

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

Przy pierwszym uruchomieniu aplikacji, chcę skupić się ustawić na imię EditText. Następnie po wybraniu "Mężczyzna" lub "Kobieta" w Obrotnicy, chcę ustawić ostrość w E-mail EditText, który znajduje się poniżej pokrętła.

Użyłem setOnItemSelectedListener ustawić requestFocus na EditText e-mail, ale problemem jest to, że automatycznie ustawia ostrość na ten EditText ilekroć uruchomić aplikację. Dzieje się tak, ponieważ domyślnie spinner wyświetla pierwszy wybór, który w tym przypadku jest "Męski" i dlatego uważa , że zaznaczenie zostało już dokonane i ustawia fokus na polu Email.

Nie mam nic przeciwko pierwszej selekcji, która jest już wybrana domyślnie w przędzarce, ale gdybym mógł jakoś nadpisać requestFocus, aby ustawić na Imię EditText początkowo byłoby wspaniale.

XML: klasa

<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> 

aktywny:

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) { 

      }    
     }); 
    } 

Odpowiedz

7

Jak o tym rozwiązaniu.

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 

Tak Twój kod będzie jak

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) { 

      }    
     }); 
    } 
+0

który jest idealny! Dziękuję za twoją pomoc, StinePike – Alex

+0

I zapraszam :) – stinepike

+0

Czy to naprawdę jest sposób obsługi plików 'onItemSelected 'w systemie Android? Jak mogę rozpocząć działanie z elementami nie wybranymi? –

Powiązane problemy