从Android中的RecyclerView子ViewModel调用父ViewModel

时间:2017-06-06 08:27:50

标签: android mvvm android-recyclerview

我有一个带有RecyclerView和ViewModel的View,我有一个对象列表,我用Recycler和ViewHolder填充RecyclerView。

每个对象都是一个ViewModel,其具有转到详细信息的click事件,当click事件被触发时,app会向服务器请求数据,如果数据正确则导航到详细信息屏幕。

我有一个" loading"检查以防止用户按两次同一个孩子,但是因为每个孩子都有自己的viewmodel实例,如果你按下快速不同的按钮(快于服务器响应),所有这些按钮都会被触发。

那么,无论如何都要调用RecyclerView viewmodel子节点的父视图模型,还是其他任何选项?实际上我可以考虑制作一个单身人来保持孩子的装载状态。

2 个答案:

答案 0 :(得分:0)

在viewmodel中添加一个布尔属性,类似于:isLoading,并在调用webservice时将其设置为true,而isLoading == true禁用来自view child的click事件。

答案 1 :(得分:0)

最后我使用的是一个带有AtomicBoolean的单例:

public final class LoadingStatusSingleton {
    private static final LoadingStatusSingleton ourInstance = new LoadingStatusSingleton();

    public static LoadingStatusSingleton getInstance() {
        return ourInstance;
    }

    private LoadingStatusSingleton() {
        isLoading = new AtomicBoolean(false);
    }

    private AtomicBoolean isLoading;

    public synchronized boolean getLoading() {
        return isLoading.get();
    }

    public synchronized void setLoading(boolean value) {
        isLoading.set(value);
    }
}

我根据需要从不同的viewmodels实例将AtomicBoolean更改为true或false。