安卓 EditText setOnClickListener

4

我有一个EditText字段。当我在上面设置onClick监听器时,需要先焦点在该字段上并且第二次点击才会调用监听器。因此实际上需要两次点击才能调用监听器。我该如何修复它,以便从第一次点击开始工作?我不想将 focusable 设置为 false,因为那样程序就无法正常工作。

4个回答

10

正如其他人所说,第一次触摸使视图获得焦点,第二次触摸则“单击”该视图。不要实现 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
        }
    }
});

你能具体一点吗?你调试过了吗?它是否完全进入了焦点监听器部分?如果是的话,第一次点击时代码中的处理情况部分是否没有执行到? - Kevin Coppock
现在它正在工作。您的代码有错误。onFocus 应更改为 onFocusChange。谢谢 :) - MikkoP
确实,今天早上咖啡不够。 :) 我已经编辑好了;很高兴它对你有用! - Kevin Coppock

3

当在安卓中点击EditText时,首先会改变它的焦点。OnFocusChangeListener只会在第一次起作用。

之后,onClickListener每次都会起作用。

因此,如果你想要实现一些EditText监听器的功能,最好实现setOnTouchListener。

每次它都会起作用。


这个答案对我有用,我无法使用setOnFocusListener,因为当Fragment被暂停时,它会被调用,这是一个完全意外的行为,我无法找出原因。所以使用onTouchListener对我有用,谢谢。 - undefined

0
我不完全理解您所说的需要两次点击才能调用侦听器的意思。但是,如果 OnClick 方法被调用两次,而您只想运行一次代码,您可以创建一个标志作为成员变量来跟踪代码是否已经运行过。例如,在将 firstTime 初始化为 true 后,在 onClick 方法中添加以下内容:
if (firstTime) {
  // Put code that you want executed once here
  firstTime = false;
}
else {
  firstTime = true;  // Second time: reset the flag
}

不是这个问题。我必须点击两次该字段才能起作用。 - MikkoP

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>

否则是的,但我有多个输入,它们都需要这个操作。 - MikkoP

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