Android onFocusChange和onClickListener

时间:2015-04-30 06:25:49

标签: java android android-edittext listener onclicklistener

单击EditText时,我试图一致地调用某个函数。问题是,如果我实现onClick,那么第一次点击EditText时就不会调用onClick,当我添加onFocusChange来修复它时,之后添加到同一EditText的监听器似乎不起作用。用户还应该能够在聚焦或单击后键入EditText。 OnTextChanged不是一个选项。你能拥有这样的两个听众吗?

我在onCreateView中设置了receiverEditText变量,并在onResume中调用addListeners。

Java:

public void addListeners()
    {
        receiverEditText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doTheThingFunction();
            }
        });

       View.OnFocusChangeListener listener = new View.OnFocusChangeListener()
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus)
            {
                doTheThingFunction();
            }
        };
        receiverEditText.setOnFocusChangeListener(listener);
    }

XML:

<EditText
            android:id="@+id/messageReceiver"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:padding="3dp"
            android:hint="@string/recipient"
            android:focusableInTouchMode="true"
            android:focusable="true">
            <requestFocus />
</EditText>

1 个答案:

答案 0 :(得分:1)

@Waltari我创建了一个demo来检查某些edittextview的焦点状态。 检查代码。

在活动的onCreate()中使用它。

EditText messageReceiver = (EditText) findViewById(R.id.messageReceiver);

        messageReceiver.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    Toast.makeText(getApplicationContext(), "Focus gained", 1)
                            .show();
                } else {
                    Toast.makeText(getApplicationContext(), "Focuse released",
                            1).show();
                }
            }
        });

XML文件

<EditText
        android:id="@+id/messageReceiver"
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:hint="recipient"
        android:padding="3dp" >
    </EditText>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:hint="recipient"
        android:padding="3dp" >
    </EditText>

这给了我messageReceiver的焦点增益释放事件。

当你在带有id&#34; messageReceiver&#34;的Edittext上显示光标时,将获得Focuse。当你点击另一个edittext而不是#34; messageReceiver&#34;叫做。

这意味着您必须在工作完成后管理焦点发布。