java - EditText OnClickListener 需要两次点击才能工作

标签 java android android-edittext

我的 Activity 中有 4 个 EditTexts。每个都有一个 OnClickListener,调用时会为我勾选一个复选框。但是,当我第一次按下 EditText 时,EditText 变为蓝色,但复选框未选中。只有当我再次按下它时,OnClickListener 才会生效并选中该框。

谁知道这是为什么?

示例代码:

public View.OnClickListener respiratoryOnClickListenerv(final View v) {
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox respiratoryCheckbox = (CheckBox) v.findViewById(R.id.vitals_2);
            respiratoryCheckbox.setChecked(true);
            respiratoryCheckbox.callOnClick();
        }
    };
    return listener;
}


respiratoryEditText.setOnClickListener(respiratoryOnClickListenerv(rootView));

最佳答案

当用户与 UI 元素交互时,将按自上而下的顺序调用各种监听器。 (例如:OnTouch -> OnFocusChange -> OnClick。)如果已经定义了一个监听器(使用 setOn...Listener)并且它消耗了这个事件:低优先级的监听器将不会被调用。就其性质而言,当您第一次触摸 EditText 时,它会通过 OnFocusChangeListener 获得焦点,以便用户可以键入。此处使用该操作,因此不会调用 OnClick。每次连续触摸都不会改变焦点,因此事件会向下传递到 OnClickListener。

由此,您有三个选择:

1) 在您的 XML 中将 focusable 属性设置为 false:

android:focusable="false"

现在每次单击时 OnClickListener 都会触发。但这会使 EditText 变得无用,因为用户无法再输入文本。

2) 与 OnClickListener 一起实现 OnFocusChangeListener:

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
             //Do your work
        }

    }
});

您可以一起捕捉 EditText 上的每个触摸事件。

3) 自己实现一个OnTouchListener:

editText.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(MotionEvent.ACTION_UP == event.getAction())
                    Toast.makeText(getApplicationContext(), "onTouch: Up", Toast.LENGTH_SHORT).show();
                return false;
            }

    });

这将在每次触摸 EditText 时执行。请注意,此事件返回一个 boolean 值。返回 false 意味着该事件将继续向下流动并到达内置的 onFocusChangeListener 以允许它接收文本。

希望对您有所帮助!

关于java - EditText OnClickListener 需要两次点击才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125285/

相关文章:

java - 安卓查看错误

android - 如何在 Android 中获取列表数据的计数

android - EditText setInputType(InputType.TYPE_CLASS_NUMBER);不工作

java - 如何在 Spring Boot 中将图像文件保存在 src/main/resources/images 中?

Java volatile 引用与 AtomicReference

java - 检查字符串的结尾,无需使用 Java 中的endsWith() 等内置方法

java - EditText 将字符串保存为整数然后将其乘以 3 不起作用?

java - 当存在 else 语句时线程工作,但当不存在时,线程停止工作

java - ADB 无线

android - 如何在android中显示密码开/关模式的切换按钮