2013-04-23 14 views
6

後、私は画面に表示され、以下の項目があります:アプリケーションを最初に起動するとアンドロイド - のEditTextにフォーカスを設定スピナー選択

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

、私はフォーカスがForenameのEditTextに設定することにしたいです。その後、Spinnerで "Male"または "Female"を選択した後、 スピナーの下にあるEmail EditTextにフォーカスを設定します。

私はrequestFocusを電子メールEditTextに設定するために使用しましたが、アプリケーションを起動するたびに にこのEditTextが自動的に設定されるという問題があります。 これは、デフォルトでスピナーがこの場合「男性」である最初の選択肢を表示するため、 は既に選択が行われたと考えて、電子メールフィールドにフォーカスを設定するためです。

デフォルトでスピナーで最初に選択されていた選択を気にすることはありませんが、最初に Forename EditTextに設定するようにrequestFocusをオーバーライドすることができました。

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> 

Activityクラス:どのようにこのソリューションについて

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

      }    
     }); 
    } 

答えて

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 

だからあなたのコードは完璧だ

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

のようになります!あなたの助けをありがとう、StinePike – Alex

+0

そしてあなたは歓迎です:) – stinepike

+0

それは本当に 'onItemSelected'を扱うAndroidの方法ですか?選択されていないアイテムでアクティビティを開始するにはどうすればよいですか? –

関連する問題