6

焦点を合わせるオブジェクトを設定する方法についての質問について読みましたが、私がやろうとしていることに対する答えも見つからないようです。

オンフォーカスリスナーを使用して、私は次のことを行いました。

  Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (Ehour.getText().length()<=0) {
                    Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();
                    Calendar nohour = Calendar.getInstance();
                    Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));
Ehour.setFocusable(true);
Ehour.requestFocus();


                }
            }
        }});

私は次の投稿からの提案を試しました:

この投稿を読みましたが、これらの提案を使用しても機能しないようです 。レイアウトが作成および表示されるときにビューにフォーカスを設定するにはどうすればよいですか?

私の目標は、編集テキストのフォーカスが失われたときに、指定されたエントリが無効な場合は、それに戻る必要があることです。

さらに、Bill Moteの提案に従って、私も試しました。

 Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (Ehour.getText().length()<=0) {
                    Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();
                    Calendar nohour = Calendar.getInstance();
                    Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));

                    ((EditText)arg0).requestFocus();

                }
            }
        }});

**編集**requestFocus()の前に以下の行を追加しました:

((EditText)arg0).setFocusable(true);

*** 編集 ****

この投稿から試してみました:アクティビティの起動時にEditTextがフォーカスを取得しないようにします

次の変更:最初のレイアウトヘッダーのレイアウトに追加しました:

android:id="@+id/enterdata"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

次に、OnChangeFocusListenerでこれを行いました。

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (((EditText)arg0).getText().length()<=0) {
                    Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();
                    Calendar nohour = Calendar.getInstance();
                    ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));
                    findViewById(R.id.enterdata).requestFocus();
                    ((EditText)arg0).setFocusable(true);
                    ((EditText)arg0).setFocusableInTouchMode(true);
                    ((EditText)arg0).requestFocus();

                }
            }
        }});

ただし、以前と同じ動作が得られます。フォーカスの移動先の編集テキストはそのままですが、フォーカスの移動先の編集テキストはフォーカスされているように見えますが、まだ待機しているようには使用できません。焦点を当てた。

*** 編集 ****

質問をしたユーザーが私と同じ問題を経験しているstackoverflowで見つかった最近の投稿に従って以下のコード:

 Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (((EditText)arg0).getText().length()<=0) {

                    Calendar nohour = Calendar.getInstance();
                    ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));
                    if (((EditText)arg0).requestFocus()) {
                         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                         Emin.clearFocus();   
                         Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();  
                    }


                }
            }
        }});
4

3 に答える 3

3

試してみてくださいarg0.requestFocus()

頭のてっぺんからView実装するかどうかわからないので、キャストする必要があるかもしれません... .requestFocus()((EditText) arg0).requestFocus()

于 2013-02-09T13:16:20.590 に答える