java - 更新 MutableLiveData 列表

标签 java android android-recyclerview android-livedata mutablelivedata

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

相关文章:

android - 要么..要么 Android <uses-feature> list 中的区别

java - 是否可以针对不同的屏幕尺寸定义不同的样式

Java escpos 字符集编码

java - 在for循环java中分配数组的值

java - 在 java String.format 中转义格式化字符

android - 使用 QueryMap 改造

java - 接口(interface) I 不能用不同的参数多次实现 : I<String> and I<String>

android - 从 RecyclerView 中删除行

android - recyclerview 交错网格布局管理器加载更多进度条

java - 从RecyclerView迁移到PagedListAdapter,使用submitList不显示数据(Android Studio JAVA)