所以,这可能是一个非常基本的设计问题,但我不知道该怎么做。
通常,当我使用事件监听器时,我在任何类中定义它,然后我在Activity中覆盖必要的方法并根据需要实例化类和监听器。
但是,在这种情况下,我有我的MainActivity类(也实现了监听器),实现监听器的类(称为testClass)和广播接收器类。广播接收器类实例化testClass的调用。现在,我想要做的是在testClass中调用给定函数时更新MainActivity中的TextView。
不知道如何解决这个问题。
希望这个摇摇欲坠的问题描述有意义。
答案 0 :(得分:0)
这是我在过去使用后台服务更新屏幕上显示的数据时遇到的问题。我使用的一般模式是将一个成员变量添加到你的处理类(在这种情况下,我认为它是你的TestClass)是一个Map(名称类似于mCallbackMap),其中android.os.Handler作为键,你的监听器对象为值(通常这将是您定义的接口)。需要在Activity中创建并因此与主线程相关联的Handler,因为您无法从主线程外部更改Activity的UI;你将使用Handler将runnable发布到主线程而不是直接操作它。
当您的活动开始时,可能在onCreate,onStart或onResume中,您将使用mCallbackMap的put()方法将其注册为TestClass的回调。只需实例化一个Handler,您也将其存储为活动的成员变量,并将其用作键,将Activity用作值。你需要删除onPause或onStop中的回调,这样你就不会在活动看不到后泄漏它。
然后,一旦TestClass完成处理广播提供的任何内容,你将遍历你的mCallbackMap(也许你有多个回调,也许你没有)并调用Handler.post(Runnable)。在Runnable的run()方法中,您可以根据需要调用回调的方法。