1

最初の要約:

class A extends AutoCompleteTextView {
   public A() {
      setOnKeyListner( ... new OnKeyLisnter() ... ); //listener 1
   }
}
A obj;
obj.setOnKeyListener( ... new OnKeyListner() ... ); //listner 2

両方のリスナーを呼び出すことは可能ですか? 現在、リスナー 2 からのみメッセージを取得しています。


AutoCompleteTextView から派生した履歴を使用して編集テキストを作成しようとしています。このクラスには、Enter キーが押されるたびに自身を更新する ArrayAdapter があります。ここまでは順調ですね。しかし、このクラスから作成されたオブジェクトがデータベースにテキストを追加する以上のことをしたい場合は、別の onKeyListener を使用する必要があります。その場合、元のリスナーは呼び出されません。Enterキーが押されたときに両方を呼び出させる方法はありますか?

class HistoryEditText extends AutoCompleteTextView {
    ArrayAdapter<String> adapter;
    public HistoryEditText(Context ctx) {
        super(ctx);
        setMaxLines(1);
        setOnKeyListener(new aCommand());
        List<String> myList = new LinkedList<String>();
        adapter = new ArrayAdapter<String>(ctx,R.layout.lvtext, myList);
        setAdapter(adapter);
    }
    private class aCommand implements OnKeyListener {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_ENTER)) {
                String str = getText().toString();
                setText(" ");
                adapter.add(str);
                adapter.notifyDataSetChanged();
                return true;
            }
            return false;
        }
    }
}

何処か別の場所:

   HistoryEditText cmdField = new HistoryEditText(ctx);
   cmdField.setOnKeyListener(... another listener ... )

リスナーの 1 つで false を返そうとしましたが、うまくいきませんでした。また、インターフェイスを使用して 2 つのリスナーを 1 つにマージしたくありません。ありがとう

4

1 に答える 1

1

同様の質問 here が役立つ場合があります。基本的にまとめはノー、できません。

Android - 2 つの onClick リスナーと 1 つのボタン

彼はそれを回避するためにいくつかの汚いハックを使用しますが、彼はあなたがやりたくないことをほとんど正確に行います.

于 2012-05-23T20:38:25.360 に答える