MyActivity从MyClass.java实现自定义监听器监听,但始终是NULL [英] MyActivity implements Custom Listener from MyClass.java but Listener is always NULL

查看:166
本文介绍了MyActivity从MyClass.java实现自定义监听器监听,但始终是NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

MyActivity实现在MyClass.java限定的CustomListener。我在活动中定义MyClass中定义的函数应触发监听器和做一些动作(完成()MyActivity)。不知怎的,我得到空引用到侦听器。我在哪里去了?

请参阅下面的code!

MyActivity.java

 进口com.project.MyClass.CustomListener;公共类MyActivity扩展活动实现CustomListener {    上下文语境;
    CustomListener监听;    公共无效的onCreate(捆绑savedInstanceState){        super.onCreate(savedInstanceState);
        上下文=这一点;        MyClass的=新MyClass的(上下文);
        myClass.setOnCustomListener(监听);    }    公共无效doThisWhenTriggered()
    {
    ...
    }}

MyClass.java

 公共类MyClass的{    私人客户服务联系CTX;
    ArrayList的< CustomListener>听众=新的ArrayList< CustomListener>();    公共MyClass的(上下文的背景下)
    {
        超();
        this.ctx =上下文
    }公共接口CustomListener
{
       公共无效doThisWhenTriggered();
}
公共无效setOnCustomListener(CustomListenerListener监听器)
{
    this.listeners.add(监听);
}    公共无效generateTrigger()
    {
        CustomListener听者= listeners.get(0);        如果(听众!= NULL)
            listener.doThisWhenTriggered();
        其他
            Log.d(MYAPP,监听器是空);
    }}

MyBroadcastReceiver.java

 公共无效的onReceive(上下文的背景下,意图意图){
    ...
    callMyClass(上下文的背景下)
}公共无效callMyClass(上下文的背景下)
{
    MyClass的MyClass的=新MyClass的(上下文);
    myClass.generateTrigger(上下文);
}

修改

问题是因为在广播接收器和监听器列表访问MyClass的不同实例作为正确地指出的@Binyamin Sharet

的解决方案是声明侦听器列表为静态并且还公共无效generateTrigger()为静态,以使接收机的callMyClass看起来像:

 公共无效callMyClass(上下文的背景下)
{
    MyClass.generateTrigger(上下文);
}


解决方案

您从来没有实例监听器(声明为 CustomListener监听; ),因此它总是空,你只需要设置活动为监听器,因为它实现了接口:

  myClass.setOnCustomListener(本);

由于在code看到的,你创建的接收器类的新实例,让你设置新实例的监听器列表不存在,因为列表不是静态的监听器。

MyActivity implements a CustomListener defined in MyClass.java. I have a function defined in MyClass that should trigger the listener and do some action(finish() MyActivity) defined in the activity. Somehow, I am getting null reference to the listener. Where am I going wrong?

Please refer to the code below!

MyActivity.java

import com.project.MyClass.CustomListener;

public class MyActivity extends Activity implements CustomListener {

    Context context;
    CustomListener listener;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        context = this;

        myClass = new MyClass(context);
        myClass.setOnCustomListener(listener);

    }

    public void doThisWhenTriggered()
    {
    ...
    }

}

MyClass.java

public class MyClass{

    private Contect ctx;
    ArrayList<CustomListener> listeners = new ArrayList<CustomListener>();

    public MyClass(Context context)
    {
        super();
        this.ctx = context
    }

public interface CustomListener
{
       public void doThisWhenTriggered();
}


public void setOnCustomListener(CustomListenerListener listener)
{
    this.listeners.add(listener);
}

    public void generateTrigger()
    {
        CustomListener listener = listeners.get(0);

        if(listener != null)
            listener.doThisWhenTriggered();
        else
            Log.d("MyAPP", "Listener is NULL");
    }

}

MyBroadcastReceiver.java

public void onReceive(Context context, Intent intent) {
    ...
    callMyClass(Context context)
}

public void callMyClass(Context context)
{
    MyClass myClass= new myClass(context);
    myClass.generateTrigger(context);
}

EDIT

The problem was BECAUSE of accessing different instances of MyClass in BroadcastReceiver and Listeners list as correctly pointed out by @Binyamin Sharet

The solution is to declare the listener list as static and also public void generateTrigger() as static so that the receiver's callMyClass looks like :

public void callMyClass(Context context)
{
    MyClass.generateTrigger(context);
}

解决方案

You never instantiate listener (declared as CustomListener listener;) and therefore its always null, you just need to set the activity as the listener, as it implements the interface:

myClass.setOnCustomListener(this);

As seen in your code, you create a new instance of the class in the receiver, so the listener you set does not exist in the listeners list of new instance, since the list is not static.

这篇关于MyActivity从MyClass.java实现自定义监听器监听,但始终是NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆