2013-04-23 22 views
6

Ben ekranda aşağıdaki öğeleri vardır: Uygulama ilk kez başlatıldığındaAndroid - Spinner seçiminden sonra EditText odak ayarlamak

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

, ben odak Forename EditText ayarlanabilir istiyorum. Ardından Spinner, " " da "Erkek" veya "Dişi" seçildikten sonra, odağın, döndürücünün altında bulunan E-posta Düzenleme Metni'nde ayarlanmasını istiyorum.

Ben eposta EditText üzerinde requestFocus ayarlamak için setOnItemSelectedListener kullandık, ama sorun ben uygulamayı başlatmak takıldığında otomatik bu EditText odağı ayarlar olmasıdır. Bu, varsayılan olarak, spinner, bu durumda "Erkek" olan ilk seçimi gösterir ve bu nedenle, bir seçimin yapılmış olduğu ve Odak alanını E-posta alanına ayarladığı olduğunu düşünür.

İlk seçim umursamıyorum zaten varsayılan olarak bükücüsünde seçilecek ama bir şekilde requestFocus Forename EditText üzerinde ayarlanması geçersiz eğer başlangıçta bu harika olurdu.

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> 

Etkinlik sınıfı: Bu nasıl çözüm hakkında

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

      }    
     }); 
    } 

cevap

7

.

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 

Yani kod mükemmel

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

gibi olacak! Yardımınız için teşekkür ederiz, StinePike – Alex

+0

Ve bir şey değil :) – stinepike

+0

Gerçekten gerçekten onItemSelected 'işleme Android yolu var mı? Seçilmeyen öğelerle nasıl etkinlik başlatabilirim? –