gpt4 book ai didi

java - 更新 MutableLiveData 列表

转载 作者:行者123 更新时间:2023-12-01 17:48:14 28 4
gpt4 key购买 nike

我有 MyViewModel类变量 MutableLiveData items哪些商店,列表Item类(class)。还有功能fetchData()通过 Retrofit 库和 checkStatus() 从 webService 获取数据当用户单击按钮时,列表中的每个项目都应执行检查的功能。

我的问题是:更新存储在 MutableLiveData 对象中的列表项的正确方法是什么?我的解决方案是否可以接受,或者您知道更好的解决方案吗?

项目.java

public class Item {
int id;
String status;
}

MyViewModel.java
public class MyViewModel extends ViewModel {

private MutableLiveData<List<Item>> items = new MutableLiveData<>();
//... rest of variables

public void fetchData() {
// get list from webService

webService.fetchItems()
.subscribeOn(Schedulers.io())
.observceOn(AndroidSchedulers.mainThread())
.observe(result -> items.postValue(result.data));
}

public void checkStatus() {
// for every item on list perform check

List<Item> itemList = items.getValue();
for(Item item : itemList) {
webService.check(item.id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.observe(result -> {
item.status = result.status;
itemList.set(itemList.indexOf(item), item);
items.postValue(items.getValue());
});
}
}
}

MainActivity.java
public class MainActivity extends AppCompatActivity {

private RecyclerViewAdapter viewAdapter;
private MyViewModel viewModel;
// rest of standard code...


// called somewhere in onCreate method
private void subscribeObservers() {
viewModel.observeItems().observe(this, items -> {
if(items != null) {
viewAdapter.setItems(items);
}
});
}

// user check click button listener
public void onClick(View view) {
viewModel.checkStatus();
}
}

最佳答案

我认为您可以将存储库用于 mvvm 架构。您可以引用here

关于java - 更新 MutableLiveData 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60831283/

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