java - Activity 暂停时更新适配器数据

标签 java android sqlite

我在 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/

相关文章:

ios - 删除 sqlite 数据库中的所有行不起作用 - iOS

android - Android Project中的Gradle构建错误

java - 安卓网络驱动程序。 XMLHttpRequest 无法加载 'URL' 。 Access-Control-Allow-Origin 不允许 Origin 'URL'。在空 :1

java - 向服务器发送 POST 请求

java - 如何仅使用 FileReader 读取多行?

android - 没有用于通知 Android 的 LED 灯

python - 通过 sqlalchemy 重复插入到 sqlite 数据库导致内存泄漏?

sql - 在不使用分组依据的情况下获得独特的结果

java - Android TCP - 程序崩溃

java - 我需要从 maven 执行批处理文件,它将采用 2 个参数并且应该从 pom.xml 传递