Android: метод вызывается дважды, если используется imeOptions

Планировка:

....
 <edittext ....="" android:hint="@string/email" android:imeoptions="actionSend">
 </edittext><button ...="" android:onclick="sendMessage" <<<-="" both="" must="" call="" it="" android:text="@string/send"> <p> Затем привязка в коде:</p> <pre class="prettyprint linenums">( (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 ответа

Измените возвращаемое значение метода onEditorAction с true на false.

На самом деле, я думаю, что метод вызывается дважды из-за KeyEvent. Попробуйте зарегистрировать тип параметра arg2 чтобы проверить его. Если вы подтвердите это, вместо того, чтобы возвращать false, вы можете добавить if/else, чтобы проверить правильное событие.


public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
 if (event.getAction() != KeyEvent.ACTION_DOWN)
 return false;

 // do your stuff

 return true;
}


Скорее всего, ваш слушатель получает два разных события. Попробуйте и отлаживайте метод onEditorAction чтобы проверить значения KeyEvent arg2, чтобы вызвать метод sendMessage в правильном событии.

licensed under cc by-sa 3.0 with attribution.