需要点击两次才能调用EditText的Onclick方法(Android)。

5

我在我的安卓活动中有一个名叫editText的文本编辑框。

         <EditText
            android:id="@+id/payment_expiration"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/payment_expiration_label"
            android:layout_centerHorizontal="true"
            android:layout_marginLeft="25dp"
            android:layout_marginRight="25dp"
            android:clickable="true"
            android:onClick="update_expiration_date"
            android:editable="false"
            android:layout_marginTop="-4dp"
            android:cursorVisible="false"
            android:maxLength="7"
            android:padding="10dp"
            android:textSize="13dp" />

当用户点击时,您可以看到:
我调用了一个启动datePickerDialog的方法:
    public void update_expiration_date(View v){
    Log.i("","cliqué");
    picker.show();
    can_update_expiration_date = true;

}

我遇到的问题是:在第一次打开此活动时,用户必须点击两次才能启动对话框

但之后,只需单击一次即可

我该如何解决这个问题?


你的onClick监听器在哪里?你在里面写了什么?你在哪里以及如何定义picker?请分享你的代码。 - Arda Yigithan Orhan
也许我在类似问题的回答可能会有所帮助:https://dev59.com/leo6XIcBkEYKwwoYNBdQ#42092582 - ban-geoengineering
4个回答

19

查看类似问题

“第一次点击仅设置文本框的焦点,然后第二次点击才会被处理为点击。”

尝试设置android:focusable="false"


0

使用OnTouchListener来处理它:

        when (view) {
            edtName -> {
                if (motionEvent.action == MotionEvent.ACTION_UP) {
                    edtName.requestFocus()
                    //TODO
                }
            }
            edtPassword -> {
                if (motionEvent.action == MotionEvent.ACTION_UP) {
                    edtPassword.requestFocus()
                   //TODO
                }
            }
        }
        return false
    }```


0
你可以尝试使用可聚焦的解决方案,或者只需添加一个状态跟踪变量...
public class YourActivity extends Activity {

private boolean clicked;

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    clicked = false;
}

public void update_expiration_date(View v){
    if(clicked == false){ 
       clicked = true;
       return;
    } else {

    Log.i("","cliqué");
    picker.show();
    can_update_expiration_date = true;
    }

}

}

0

begiPass方案可行,但还有更好的解决方案。

使用focusable false时,用户永远无法看到哪个edittext被选中。

更好的解决方案是使用onTouchListener。我的示例代码:

 edit.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                edit.setText("");
                v.setOnTouchListener(null);
                return false;
            }
  });

别忘了将OnTouchListener设置为null。我们只想清除提示(仅一次)。

问候!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接