我有一个带有RecyclerView和ViewModel的View,我有一个对象列表,我用Recycler和ViewHolder填充RecyclerView。
每个对象都是一个ViewModel,其具有转到详细信息的click事件,当click事件被触发时,app会向服务器请求数据,如果数据正确则导航到详细信息屏幕。
我有一个" loading"检查以防止用户按两次同一个孩子,但是因为每个孩子都有自己的viewmodel实例,如果你按下快速不同的按钮(快于服务器响应),所有这些按钮都会被触发。
那么,无论如何都要调用RecyclerView viewmodel子节点的父视图模型,还是其他任何选项?实际上我可以考虑制作一个单身人来保持孩子的装载状态。
答案 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。