单击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>
答案 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;叫做。
这意味着您必须在工作完成后管理焦点发布。