草庐IT

java - 处理一个事件 : implement an interface or using inner class to handle the interface. 哪个更好

coder 2023-12-03 原文

处理一个事件,有两种方式:

  1. 实现回调接口(interface)举例

    public class A implements View.OnClickListener {
        public void onClick(View v) {
            ....
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...
            aboutLayout = (LinearLayout) findViewById(R.id.aboutLayout);
            aboutLayout.setOnClickListener(this);
        }
    }
    
  2. 创建一个实现回调接口(interface)的内部类

    public class ActivityAbout  {
        private class ViewClickListener implements View.OnClickListener {
            public void onClick(View v) {
                ..
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...
            ViewClickListener listener = new ViewClickListener();
            aboutLayout = (LinearLayout) findViewById(R.id.aboutLayout);
            aboutLayout.setOnClickListener(listener);
        }
    }
    

哪个更好?

最佳答案

选择完全取决于您计划使用该类的方式,每种方法都是有效的并且有其相应的优点和缺点:

  • 方法 1 的编码速度很快,但将您限制为一个 onClick() 函数,这可能会或可能不会成为组织困惑。
  • 方法 2 允许您创建多个 onClick() 函数并在更合乎逻辑的方法中使用它们。

但是我想介绍方法三,匿名回调:

public class MyActivity extends Activity {
    OnClickListener myClickListener1 = new OnClickListener() {
        public void onClick(View v) {
            ..
        }
    }

    OnClickListener myClickListener2 = new OnClickListener() {...}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        view.setOnClickListener(myClickListener1);
    }
}

请注意,与方法 2 不同,我没有创建自定义类。我会避免创建新的自定义类,除非您要添加更多功能、保留局部变量或以其他方式修改 OnClickListener 的基本功能。

关于java - 处理一个事件 : implement an interface or using inner class to handle the interface. 哪个更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342125/

有关java - 处理一个事件 : implement an interface or using inner class to handle the interface. 哪个更好的更多相关文章

随机推荐