setOnKeyListener没有响应

Nia*_*all 4 android

我是Android的新手,并且通过书中的待办事项列表示例.我有一个Activity在其下面显示EditText和ListView.有一个onKey事件,它应该将EditText中的文本添加到ListView并清除EditText.但是,当我在键盘上按Enter键时,所有发生的事情都是在EditText中添加一个新行,并且没有任何内容添加到ListView中.

onCreate代码是:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_to_do_list);

    // Get UI references
    ListView myListView = (ListView)findViewById(R.id.myListView);
    final EditText myEditText = (EditText)findViewById(R.id.myEditText);
    myEditText.setText("test");
    // Create ArrayList to store To Do items
    final ArrayList<String> toDoItems = new ArrayList<String>();

    // Create ArrayAdapter to bind items to List View
    final ArrayAdapter<String> aa;

    aa = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_list_item_1,
                                  toDoItems);

    // Bind Adapter to List View
    myListView.setAdapter(aa);

    myEditText.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
                if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
                    (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    toDoItems.add(0, myEditText.getText().toString());
                    aa.notifyDataSetChanged();
                    myEditText.setText("");
                    return true;
                }
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我添加了myEditText.setText("test");just以确保对myEditText的引用正常工作,它就是这样.我已经尝试从onKey事件中删除if语句,它似乎根本没有注册关键事件.谁能告诉我这里做错了什么?

nat*_*z0r 13

您可以尝试使用OnEditorActionListener:

http://developer.android.com/reference/android/widget/TextView.html#setOnEditorActionListener(android.widget.TextView.OnEditorActionListener)

您可以在XML中设置edittext:

android:imeOptions="actionDone"

然后在代码中:

 myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
           // your action here
           return true;
        }
      return false;
    }
 )};
Run Code Online (Sandbox Code Playgroud)


小智 5

你用的是虚拟键盘吗?在这种情况下,问题在于 OnKeyListener 只能由硬件按钮调用。看看这里: http://developer.android.com/reference/android/view/View.OnKeyListener.html

第一行表示:当硬件按键事件分派到此视图时要调用的回调的接口定义。

Perpas 某行这将解决您的问题:Validating edittext in Android