2011-06-22 34 views
18

私はアクティビティで4 EditTextのフィールドと2つのスピナーを使用しています。これらのコンポーネントの順序は、2 EditText、次に2つのスピン、次に2 EditTextのフィールドです。スピナーがフォーカスを取得しない

EditTextからスピナーにフォーカスを移動すると(スピンナーがフォーカスを取得せず、フォーカスがスピナーの後に置かれた次のEditTextフィールドに転送される)、問題が発生します。

私はrequestfocus()をスピナーに使用しましたが、動作しませんでした。

スピナーにピントが合っていることを確認するにはどうすればよいですか?

+1

回答フラグを付与してください。 – JJD

+1

選択した回答を許可しない場合はマイナス1です。 –

答えて

3

これは暗闇の中のショットですが、スピナーでフォーカス可能なプロパティ(XMLまたはコードで、それをどのように行っていても)をtrueに設定してみてください。

http://developer.android.com/reference/android/view/View.html#attr_android:focusable

EDIT:また、この質問を参照してください。Can't manage to requestFocus a Spinner

+0

thanx私は以下を実行することで解決しました。1)SpinnerオブジェクトをonCreateメソッド内に設定して、コードが最初に実行されるようにしました。 2)私は以下を使用しました: スピナーs1 =(スピナー)findViewById(R.id.spinner1); s1.setFocusable(true); s1.setFocusableInTouchMode(true); – Shameen

+1

@ShameenこれらのフラグはXMLで設定できました。 –

19

おかげで、私は次のようにして解決している:

  1. 私はonCreateメソッド内で一番上にスピナーオブジェクトを(設定)私のコードが最初に実行されることを確認するだけです
  2. 私は以下を使用しました:

    Spinner s1 = (Spinner) findViewById(R.id.spinner1); 
    s1.setFocusable(true); 
    s1.setFocusableInTouchMode(true); 
    s1.requestFocus(); 
    
+0

あなたは明らかに@shanetの解決策を得ていますので、答えを選択してください。 –

31

解決策が見つからず、スピナーの位置を変えることができました。スピナー前のEditText で、このリスナーを追加します。

editTextBefore.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_NEXT) { 
      hideKeyboard(); 
      textView.clearFocus(); 
      spinner.requestFocus(); 
      spinner.performClick(); 
     } 
     return true; 
    } 
}); 

あなたはまた、フォーカスを取得することができスピナーにこれらの行を追加する必要があります

spinner.setFocusable(true); // can be done in XML preferrable 

マイhideKeyboard機能は、単に視覚的なディテールました私はキーボードが隠れますので、追加したい:私はこのトリッキーな質問に役立っている

private void hideKeyboard() { 
    InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 
      InputMethodManager.HIDE_NOT_ALWAYS); 
} 

希望。
フラグInputMethodManager.HIDE_NOT_ALWAYSは、found in the documentationとすることができます。

+1

focusableInTouchModeを設定する必要はありませんか? –

+0

focusableInTouchModeを設定すると便利です。また、XMLで試してみるとうまくいかなかったようですが、プログラムで試してみてください。 –

+0

恐ろしい感謝!!!! –

0

私はちょうど同じ問題を抱えていました。 nextFocusDown/Up/Left/Rightプロパティを使って解決しました。

<EditText 
    android:id="@+id/tPhone" 
    ... 
    android:focusableInTouchMode="true" 
    android:focusable="true" 
    android:nextFocusDown="@+id/sCountry"/> 

<Spinner 
    android:id="@+id/sCountry" 
    .... 
    android:focusableInTouchMode="true" 
    android:focusable="true" 
    android:nextFocusUp = "@+id/tPhone" 
    android:nextFocusDown="@+id/tStreet"/> 

<EditText 
    android:id="@+id/tStreet" 
    ... 
    android:visibility="gone" 
    android:focusableInTouchMode="true" 
    android:focusable="true" 
    android:nextFocusUp = "@+id/sCountry"/> 

しかし、なぜこれも必要です...私を打ち負かす。

関連する問題