2013-04-23 10 views
6

Ho le seguenti voci visualizzate sullo schermo:Android - impostare lo stato attivo su EditText dopo la selezione Spinner

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

Quando l'applicazione viene lanciata, voglio l'attenzione da impostare sul Forename EditText. Quindi, dopo che "Maschio" o "Femmina" sono stati selezionati nello Spinner, , voglio che lo stato attivo sia impostato su Email EditText che si trova sotto lo spinner.

ho usato setOnItemSelectedListener per impostare il requestFocus sul EditText e-mail, ma il problema è che imposta automaticamente la messa a fuoco su questo EditText ogni volta che avviare l'applicazione. Questo accade perché per impostazione predefinita lo spinner visualizza la prima selezione che in questo caso è "Maschio" e quindi pensa che sia già stata effettuata una selezione e imposta l'attenzione sul campo Email.

non mi dispiace la prima selezione ad essere già selezionato nella filatore di default ma se potessi in qualche modo ignorare l'requestFocus da impostare sul Forename EditText inizialmente che sarebbe grande.

XML: classe

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

attività:

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

      }    
     }); 
    } 

risposta

7

Che ne dite di questa soluzione.

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 

Così il vostro codice sarà come

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

che è perfetto! Grazie per il vostro aiuto, StinePike – Alex

+0

E siete i benvenuti :) – stinepike

+0

È davvero il modo Android di gestire 'onItemSelected'? Come posso iniziare un'attività con elementi non selezionati? –

Problemi correlati