18

私は2つの活動をしていEditTextます。デフォルトではフォーカスが最初のフィールドに移動するためrequestFocus、2 番目のフィールドでを呼び出しています。EditTextフォーカスは 2 番目のフィールドにあるように見えますが (2 番目のフィールドは強調表示された境界線を取得します)、ハードウェア キーボードを使用して文字を入力しようとすると、テキストは最初のEditTextコントロールに表示されます。なぜそれが起こっているのでしょうか?

4

4 に答える 4

1

私は同じ問題に直面しました.EditTextの1つにOnFocusListenerがあり、フォーカスを失ったときにいくつかの変換を行いますが、何か問題が発生した場合はFocusを再度リクエストして、ユーザーに問題を修正させます. ここで問題が発生し、フォーカスのある EditText に行き着き、フォーカスのあるビューを検索しようとしましたが、findFocus() が null を返しました。私が見つけた唯一の解決策は、EditText変数を作成することでした

private EditText requestFocus;

何か問題がある場合は、EditText をその変数に設定します。これは私が気に入らないものですが、動作します。アクティビティの他のビューに OnFocusListener を設定します。彼らが集中したら、私はこれをします

@Override
public void onFocusChange(View v, boolean hasFocus) {

    if (hasFocus)
        if(requestFocus != null){
            v.clearFocus();
            requestFocus.requestFocus();
            requestFocus = null;
        }
}

フォーカスを持つビューからフォーカスをクリアし、Focus をリクエストして変数 requestFocus を null に設定します。

これは、Focus を要求した時点でまだ誰もフォーカスを持っていないため、EditText がフォーカスを取り戻し、アクティビティが次のビューにフォーカスを与えるために発生していると考えています。それが誰かに役立つことを願っています。

于 2011-08-06T18:54:47.907 に答える
0

requestFocus(); を使用してみてください。http://developer.android.com/reference/android/view/View.html#requestFocus ()

于 2011-03-30T21:14:39.923 に答える