gpt4 book ai didi

android - 从服务更新 `RecyclerView` 数据集

转载 作者:行者123 更新时间:2023-11-29 15:42:12 25 4
gpt4 key购买 nike

如何从后台服务更新 RecyclerView 数据集。该服务与服务器保持套接字连接,当服务器响应数据时,服务必须在 recyclerview(即 MainActivity 中)中更新该数据。

最佳答案

从Serivce向Activity发送事件的方式有很多种。
我向您推荐以下方式。

绑定(bind)和回调

我认为绑定(bind)和回调是官方方式。
Communication between Activity and Service
Example: Communication between Activity and Service using Messaging

事件总线

我认为 EventBus 是简单的方法。
https://github.com/greenrobot/EventBus

在 Activity 中(或任何地方):

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}

@Override
protected void onResume() {
super.onResume();
BusHolder.getInstnace().register(this);
}

@Override
protected void onPause() {
super.onPause();
BusHolder.getInstnace().unregister(this);
}

@Subscribe
public void onDatasetUpdated(DataSetUpdatedEvent event) {
//Update RecyclerView
}
}

BusHolder 持有 BusEvent 实例:

public class BusHolder {

private static EventBus eventBus;

public static EventBus getInstnace() {
if (eventBus == null) {
eventBus = new EventBus();
}
return eventBus;
}

private BusHolder() {
}
}

发布的事件:

public class DataSetUpdatedEvent {
//It is better to use database and share the key of record of database.
//But for simplicity, I share the dataset directly.
List<Data> dataset;

public DataSetUpdatedEvent(List<Data> dataset) {
this.dataset = dataset;
}
}

从您的服务发送消息。

BusHolder.getInstnace().post(new DataSetUpdatedEvent(dataset));

希望对您有所帮助。

关于android - 从服务更新 `RecyclerView` 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38504452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com