Android:如果使用imeOptions,则会调用两次Method

时间:2013-09-10 21:07:10

标签: android android-activity ime

布局:

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

我做错了什么?

3 个答案:

答案 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;
}