第一个总结:
class A extends AutoCompleteTextView {
public A() {
setOnKeyListner( ... new OnKeyLisnter() ... ); //listener 1
}
}
A obj;
obj.setOnKeyListener( ... new OnKeyListner() ... ); //listner 2
是否可以同时调用两个听众?现在我只收到来自监听器 2 的消息。
我正在尝试使用从 AutoCompleteTextView 派生的历史构建一个编辑文本。该类有一个 ArrayAdapter,它会在按下回车键时自行更新。到现在为止还挺好。但是当从这个类创建的对象想要做的不仅仅是将文本添加到数据库中时,我需要使用另一个 onKeyListener。如果这样做,则不会调用原始侦听器。按下回车键时,有没有办法让两者都被调用?
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 ... )
我尝试在其中一个侦听器中返回 false ,但没有奏效。此外,我不想使用接口将两个侦听器合并为一个。谢谢