0

布局:

    ....
    <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 (键盘)中按“完成”时,两个活动同时开始。

我究竟做错了什么?

4

3 回答 3

4

onEditorAction将方法的返回值从 更改truefalse

实际上,我认为该方法被调用了两次,因为KeyEvent. 尝试记录arg2参数的类型以检查它。如果您确认这一点,而不是返回false,您可以添加 if/else 来检查正确的事件。

于 2013-09-11T13:02:41.787 回答
1

您的侦听器可能正在接收两个不同的事件。尝试调试onEditorAction方法来检查 的值,在正确的事件中KeyEvent arg2调用您的方法。sendMessage

于 2013-09-10T22:48:30.683 回答
1
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    if (event.getAction() != KeyEvent.ACTION_DOWN)
        return false;

    // do your stuff

    return true;
}
于 2017-04-03T09:09:01.347 回答