私は2つの活動をしていEditText
ます。デフォルトではフォーカスが最初のフィールドに移動するためrequestFocus
、2 番目のフィールドでを呼び出しています。EditText
フォーカスは 2 番目のフィールドにあるように見えますが (2 番目のフィールドは強調表示された境界線を取得します)、ハードウェア キーボードを使用して文字を入力しようとすると、テキストは最初のEditText
コントロールに表示されます。なぜそれが起こっているのでしょうか?
4 に答える
私は同じ問題に直面しました.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 がフォーカスを取り戻し、アクティビティが次のビューにフォーカスを与えるために発生していると考えています。それが誰かに役立つことを願っています。
requestFocus(); を使用してみてください。http://developer.android.com/reference/android/view/View.html#requestFocus ()