2

TextViewボタンが押された後、またはユーザーが「Enter」を押したときに文字列を表示する単純なコードがあります。ユーザーがボタンを押すとすべてが検索されますが、「Enter」を押すとperformClick()、ボタンと同じ関数を呼び出すために呼び出されます。しかし、私の関数は常に2回呼び出されます:

 private OnKeyListener ChampKeyListener = new OnKeyListener()
    {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if(keyCode == KeyEvent.KEYCODE_ENTER)
            {
                recherche.performClick(); // recherche is my button
            }
            return false;
        }
    };

    private OnClickListener RechercheListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
        //whatever I have tried here it is always called twice

        }
    };

どうすればそれを止めることができますか。私は別の場所に行くことを解決できることを見てきましたが、それらを使いたくありませんViewActivity

ヒントはありますか?ありがとう!

4

2 に答える 2

6
  1. プレス KeyEvent.ACTION_DOWN&には2つのアクションがあるのでKeyEvent.ACTION_UP

  2. http://developer.android.com/reference/android/view/View.OnKeyListener.html

trueリスナーがイベントを消費した場合は戻り、falseそうでない場合は戻ります。

それを試してみてください...

public boolean onKey(View v, int keyCode, KeyEvent event) {

    if (event.getAction() == KeyEvent.ACTION_DOWN)
          {
                if(keyCode == KeyEvent.KEYCODE_ENTER)
                {
                    recherche.performClick(); // recherche is my button
                    return true;
                }


           }

    return false;
}
于 2012-06-29T20:17:17.253 に答える
2

キーが押されたときと離されたときの2回、イベントが発生した可能性があります。試す:

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_ENTER &&
            event.getAction() == KeyEvent.ACTION_DOWN) {
        recherche.performClick(); // recherche is my button
        return true; // consume event
    }
    return false;
}
于 2012-06-29T20:21:16.007 に答える