Android - OnClick Listener在一个单独的类中

Pzt*_*tar 29 android class onclicklistener

是否可以创建一个二级类来保存OnClick侦听器?意义没有在Activity类中创建?

我只是发现在主活动类中放置OnClick监听器只是凌乱,我宁愿将它们放在不同的类中.谢谢

MH.*_*MH. 30

当然,那是可能的.只需创建一个实现View.OnClickListener并将其设置为侦听器的类View.例如:

public class ExternalOnClickListener implements View.OnClickListener {

    public ExternalOnClickListener(...) {
        // keep references for your onClick logic 
    }

    @Override public void onClick(View v) {
        // TODO: add code here
    }

}
Run Code Online (Sandbox Code Playgroud)

然后将上面的类的实例设置为侦听器:

view.setOnClickListener(new ExternalOnClickListener(...));
Run Code Online (Sandbox Code Playgroud)

参数化构造函数是可选的,但很可能你需要通过一些东西来实际使你的onClick(...)逻辑工作.

匿名实现类通常更容易使用.只是一个想法.


Ren*_*ith 10

而不是把它onCLicklistener放在一个单独的类中,为什么不试着在onClickListener外面定义onCreate()

例如:像这样

的onCreate()

yourViewName.setOnClicklistener(listener):
Run Code Online (Sandbox Code Playgroud)

外面onCreate()

private OnClickListener listener    =   new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    };
Run Code Online (Sandbox Code Playgroud)

  • 我明白你想说的是什么,我知道怎么做.但这不是我想要的.我不想在主要活动中使用它.谢谢 (8认同)

Law*_*hoy 5

是的你可以.但是,使侦听器成为内部类有一个优点 - 它可以直接访问活动类的字段和变量.如果你使它成为一个单独的类,并且你的监听器实际上需要访问5个视图,那么你的监听器构造函数可能如下所示:

MyListener listener = new MyListener(context, button, textView1, textView2, ratingBar, imageView);

这也有点笨重.如果您的听众很简单,请继续将其作为单独的课程.否则,由您提供可读性.