最初の要約:
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 つにマージしたくありません。ありがとう