布局:
....
<EditText
....
android:hint="@string/email"
android:imeOptions="actionSend"/>
<Button
...
android:onClick="sendMessage" <<<- both must call it
android:text="@string/send" />
然后在代码中绑定:
( (EditText) findViewById(R.id.email) ).setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
sendMessage(findViewById(android.R.id.content));
return false;
}
});
sendMessage在哪里
public void sendMessage(View view)
{
....
intent.putExtra("email", getEditContent(R.id.email));
startActivityForResult(intent, 0);
}
当我按下按钮时,一切都很好。当我在imeOption(键盘)中按“完成”时,两个活动同时开始。
我做错了什么?
答案 0 :(得分:3)
将onEditorAction
方法的返回值从true
更改为false
。
实际上,我认为该方法因KeyEvent
而被调用两次。尝试记录arg2
参数的类型以进行检查。如果您确认这一点,则可以添加if / else来检查正确的事件,而不是返回false
。
答案 1 :(得分:1)
您的听众可能会收到两个不同的事件。尝试并调试onEditorAction
方法以检查KeyEvent arg2
的值,以便在正确的事件中调用sendMessage
方法。
答案 2 :(得分:1)
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN)
return false;
// do your stuff
return true;
}