java - C 和 Java 如何将函数定义分开,而不是 new OnClickHandler(){

标签 java android

我有很好的 C 背景,现在正在为 android/java 编写代码。 我无法理解为什么处理程序函数的函数定义是在另一个函数内完成的。代码变得如此困惑且难以维护和理解(来自 C 程序员的观点)。

所以我有这个代码

    final Button btnOpenPopup = (Button)findViewById(R.id.menuButton);
btnOpenPopup.setOnClickListener(new 
            Button.OnClickListener()
    {...}

可不可以有一个函数 myButtonClickListner() {} 在类中定义,btnOpenPopup.setOnClickListener((SomeCast)myButtonClickListner

我认为一定有办法,但我找不到它..

请评论。

最佳答案

嗯,有两种方法可以做到这一点:

1- 让包含类实现 OnClickListener 接口(interface)。例如:

public class MainActivity extends Activity implements OnClickListener{
    //...

    public void onCreate(Bundle savedState){
        //...
        final Button btnOpenPopup = (Button)findViewById(R.id.menuButton);
        btnOpenPopup.setOnClickListener(this);
    }

    public void onClick(View v){
        switch(v.getId()){
            case R.id.button1:
            //
            break;
        }
    }

2- 第二种方法是 Selvin 在他的评论中描述的方法:创建一个单独的类,它实现 OnClickListener 接口(interface),并在 onCreate() 中实例化它。因此,假设您在自己的 myButtonListener.java 文件中有一个 myButtonListener 类,您可以简单地执行以下操作:

final Button btnOpenPopup = (Button)findViewById(R.id.menuButton);
btnOpenPopup.setOnClickListener(new myButtonListener);

关于java - C 和 Java 如何将函数定义分开,而不是 new OnClickHandler(){,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982319/

相关文章:

android - close() 从未在数据库上显式调用,android 数据库未关闭

Android Socket.io 后台服务

java - 向上和向下绘制星星

java - TextViews 和 Intents 问题

java - 无法弄清楚如何在java中重叠图像

android - onCreateView 中的 mainLayout 不适用于 4.4 及更低版本

javascript - 使用 WebView 获取 android 的 JavaScript 值

java - jackson 根据值(value)忽略序列化字段

php - 本地机器 SQL DB 工作; Web dB 上的访问被拒绝错误

android - 如何为纵向和横向指定不同的布局?