我在 Activity 中有一个适配器及其数组列表
private ArrayList<String> data = new ArrayList<>();
我也有 brodcastReciver 当我获取数据时我将其添加到 ArrayList 数据
data.add("bla bla bla"); // brodcast data
并更新适配器
但是当 Activity 暂停时我的适配器没有更新,并且我错过了广播数据
那么这个问题的解决方案是什么,我刚刚做了一些搜索,发现了这个 answer但他不同意这个想法
我的应用程序的想法当然是使用 sqlite 进行聊天应用程序,问题是当 Activity 暂停时我错过了 BrodcastEvent,并在每次 Activity 恢复时从 sqlite 获取数据,我认为这是个坏主意
最佳答案
如果在 list 中注册,BroadcastReceiver
将在没有 Activity 启动或恢复的情况下接收事件。
<receiver android:name="YourReceiver" >
<intent-filter>
<action android:name="android.intent.action.YourAction" />
</intent-filter>
</receiver>
另一个问题,BroadcastReceiver
如何通知消息适配器。
您可以定义一个单例对象作为观察者寄存器管理器。如果activity
启动,它会注册自己,BroadcastReceiver
在收到新消息时通知它。
广播接收器
@Override
public void onReceive(Context context, Intent intent) {
...
SingletonRegister.getInstance().addMessage("bla bla bla");
}
Activity
protected void onCreate(Bundle savedInstanceState) {
...
SingletonRegister.getInstance().observe(this);
}
@Override
public void update(String message) {
data.add(message);
}
如果activity
没有启动,activity
将因为未注册而不会收到通知。为了确保接收到所有消息,activity
需要在注册后主动请求最后的消息。
Activity
protected void onCreate(Bundle savedInstanceState) {
...
SingletonRegister.getInstance().observe(this);
requestMessageFromServer();
}
关于java - Activity 暂停时更新适配器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47970639/