3

EditText フィールドがあります。それに onClickListener を設定すると、最初にフィールドにフォーカスし、次にクリックしてリスナーを呼び出す必要があります。したがって、実際には 2 回クリックするだけでリスナーを呼び出すことができます。最初のクリックから動作するように修正するにはどうすればよいですか? プログラムが機能しないため、フォーカス可能を false に設定したくありません。

4

4 に答える 4

10

他の人が言ったように、最初のタッチでビューがフォーカスされ、2回目のタッチで「クリック」されます。実装する代わりにOnClickListener、実装しOnFocusChangeListenerます。例えば

EditText edittext = (EditText)findViewById(R.id.myedittext);
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            //handle your situation here
        }
    }
});
于 2012-05-14T17:33:25.483 に答える
1

Android で EditText をタッチすると、まずフォーカスが変更されます。OnFocusChangeListener が初めて機能します。

その後、 onClickListener は毎回動作します。

したがって、EditText リスナーに何かを実装する場合は、 setOnTouchListenerを実装することをお勧めします。

毎回うまくいきます。

于 2014-11-17T05:35:53.500 に答える
0

置く

<requestFocus />

xmlのedittextで。それを試してみてください、あなたに役立つかもしれません

    <EditText
            android:id="@+id/edtTxtEmail1"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:inputType="textEmailAddress"
            android:hint="Email ID" >
            <requestFocus />
        </EditText>
于 2012-05-14T17:22:58.707 に答える
0

リスナーを呼び出すために 2 回クリックするという意味がよくわかりません。ただし、OnClick メソッドが 2 回呼び出され、コードを 1 回だけ実行したい場合は、コードが既に実行されているかどうかを追跡するメンバー変数としてフラグを作成できます。たとえば、 に初期化firstTimeした後、メソッドに次trueのようなものを含めます。onClick

if (firstTime) {
  // Put code that you want executed once here
  firstTime = false;
}
else {
  firstTime = true;  // Second time: reset the flag
}
于 2012-05-14T16:55:55.270 に答える