【问题标题】:How to track events of an activity from another class in android?如何跟踪android中另一个类的活动事件?
【发布时间】:2021-02-12 06:58:13
【问题描述】:

我试图通过在 Activity 中创建一个接口并在该类中实现该接口来跟踪另一个类的事件 (OnActivityResult)。像这样:

OnAuthCompletedListener listener;

public void setOnAuthCompletedListener(OnAuthCompletedListener listener){
      this.listener = listener;  
}

public interface OnAuthCompletedListener {
     void OnAuthCompleted(Auth auth)
}

在我写的另一堂课中

MainActivity activity= new MainActivity();
activity.setOnAuthCompletedListener(auth->{

});

但每当事件发生时,应用程序就会因 NPE 而崩溃。我知道我正在使用与真实活动实例不同的活动实例。我的问题是如何在非活动类中使用该接口?

我也知道使用 RXJava 有一些更好的解决方案,但我不够聪明,无法实现,有人可以帮忙吗?

【问题讨论】:

  • 你的“另一个班级”应该得到真正的工作Activity参考而不是new一个
  • 如何实现?
  • 好吧,也许引入新方法public void setActivityForListener(Activity act) 或者只是显示你的“另一个类”,写答案会更容易
  • 好吧,由于官方原因,我无法显示该类,但它是一个提供者类,没有引用该类中的任何上下文或活动。
  • 好吧,没有代码很难猜测哪种分辨率适合您的需要。但我已经发布了一些基本方法作为答案,请查看

标签: java android rx-java2


【解决方案1】:

让我们假设“另一个类”

public class AnotherClass implements OnAuthCompletedListener {

    // rest of code

    public void OnAuthCompleted(Auth auth){
        //interface implementation 
    }

}

Activity 中声明 ArrayList<OnAuthCompleted> registeredInterfaces = new ArrayList<>(); 并在每次创建 implements OnAuthCompletedListener 的类的新实例时在数组中注册其侦听器(因此在此示例中为:AnotherClass,但您可以有多个不同的类实现此接口)

AnotherClass newAnotherClass = new AnotherClass(); 
registeredInterfaces.add(newAnotherClass);

当你在nulling/destroying 这个newAnotherClass 实例时注销它的监听器

newAnotherClass.destroy();
registeredInterfaces.remove(newAnotherClass);
newAnotherClass = null;

现在当OnAuthCompletedListenerActivity 中被调用时,然后遍历这个数组并调用每个注册的OnAuthCompletedListener.OnAuthCompleted。并且不要忘记在Activity 被销毁时清除这个数组,以确保没有内存泄漏

【讨论】:

  • 我在我的 Application 类中获取了 MainActivity 实例并在 onCreate() 中对其进行了初始化,然后在 AnotherClass 中我没有获取该 Activity 的新实例,而是使用了 MyApplication.getInstance().mainActivity .setOnAuthCompletedListener。现在 NP Exception 没有发生并解决了这个问题,但这是一个上帝的方法吗?
  • 好吧,这很值得怀疑...MyApplication.getInstance() 不是干净可靠的解决方法,在某些情况下它可能会返回null,但是当您只使用Activities 时它会工作。仔细阅读 THIS 帖子和所有答案,包括 cmets 以获取更多信息
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 2013-05-22
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多