android - setOnKeyListener 在此代码中如何工作?

标签 android

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

                }

有人可以为我分解这段代码吗,我无法理解 setOnKeyListener 方法。

最佳答案

您的问题似乎是您不太了解匿名类。

首先,setOnKeyListener 接受一个OnKeyListener 对象。您可以创建一个实现此接口(interface)的新类,然后实例化它:

class MyKeyListener implements OnKeyListener {
    @Override
    public boolean onKey (View v, int keyCode, KeyEvent event) {
        // ...
    }
}

// On your other method:
myEditText.setOnKeyListener(new MyKeyListener());

我希望这很清楚,因为这几乎就是您在 Java 中所做的一切。

但是,Java 允许您通过定义匿名类 来避免定义另一个类。为此,您只需在所需的基类或接口(interface) (OnKeyListener) 上执行 new,然后添加一个 class body,就好像你在定义它:

myEditText.setOnKeyListener(new OnKeyListener(){
    @Override
    public boolean onKey (View v, int keyCode, KeyEvent event) {
        // ...
    }
});

最后一段代码就是您所拥有的。

关于android - setOnKeyListener 在此代码中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966347/

相关文章:

android - 无论布局容器如何,动画 View

使用推文显示个人资料头像时,Android ListView 变慢

android - 指定 ViewPropertyAnimator 的起始值

java - 了解简单 XML 解析器 - 新文件输出 - Java

Android 应用向后兼容版本的 google play services API

android - SQLiteOpenHelper android中变量的可见性

android - 无黑屏的 Activity 之间的平滑过渡

android - 当底层数据发生变化时,根据 SQlite 数据库中的数据更新 Fragment List 适配器

android - 当应用程序未运行时,GCM 推送通知不会在某些设备中显示

android - Android Nougat 变更列表