Java 如何添加和删除<;对象>;从(和到)LiveData<;列表<;对象>>;?
我有一个recyclerView,里面充满了LiveData currentList。 我使用onSuccess方法中的currentList.setValue(people)获取Single并添加person(参见下面的代码)。 但当我打开应用程序时,recyclerView中只有一个对象。 我的任务是: 1) 当应用程序打开时,必须将4人添加到recyclerView(即当前列表); 2) 在onSwipe方法之后,它必须删除第一个,并将RoomDatabase中的1个新随机数添加到currentList的末尾 这意味着我需要删除和向LiveData添加对象的方法。 我该怎么做?(ViewModel代码如下所示)Java 如何添加和删除<;对象>;从(和到)LiveData<;列表<;对象>>;?,java,android,mvvm,rx-java2,android-livedata,Java,Android,Mvvm,Rx Java2,Android Livedata,我有一个recyclerView,里面充满了LiveData currentList。 我使用onSuccess方法中的currentList.setValue(people)获取Single并添加person(参见下面的代码)。 但当我打开应用程序时,recyclerView中只有一个对象。 我的任务是: 1) 当应用程序打开时,必须将4人添加到recyclerView(即当前列表); 2) 在onSwipe方法之后,它必须删除第一个,并将RoomDatabase中的1个新随机数添加到curr
公共类PersonViewModel扩展了AndroidViewModel{
私人储存库;
private CompositeDisposable composite=新CompositeDisposable();
私人单身男女;男/女/女
私有单个mGuy;//PSKOV
私有MutableLiveData currentList=新的MutableLiveData();
public PersonViewModel(@NonNull应用程序){
超级(应用);
mRepository=新人员存储库(应用程序);
mGuyWho=mRepository.getGuyWho();//LOBNYA
mGuy=mRepository.getGuy();//PSKOV
mGuyWho.subscribeOn(Schedulers.io())//LOBNYA-nachalo
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新的SingleObserver(){
@凌驾
认购的公共无效(一次性d){
Log.d(标记“onSubscribe(disposabled):调用”);
添加(d);
}
@凌驾
成功时公开作废(列出人员){
Log.d(标记“onSuccess:called”);
currentList.setValue(people);//这里我将列表传递给LiveData
}
@凌驾
公共无效申报人(可丢弃的e){
Log.d(标记“onError:called”);
Toast.makeText(应用程序,“无数据”,Toast.LENGTH_SHORT).show();
}
});//LOBNYA konets
mGuy.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新的SingleObserver(){
@凌驾
认购的公共无效(一次性d){
Log.d(标记“onSubscribe(disposabled):调用”);
添加(d);
}
@凌驾
成功时公开作废(人){
Log.d(标记“onSuccess:called”);
currentList.setValue(person);//有一个错误,因为我无法绕过到LiveData
}
@凌驾
公共无效申报人(可丢弃的e){
Log.d(标记“onError:called”);
}
})
}
LiveData getCurrentList(){
返回当前列表;
}
};
您的LiveData
由列表
对象组成:
private MutableLiveData<List<Person>> currentList = new MutableLiveData<>();
private MutableLiveData currentList=new MutableLiveData();
在您的onSuccess()
方法中,您试图向它传递一个Person
对象。您应该在其中传递mutableListOf(Person())
,使其工作但是,这仍然不能解决您的问题。
您需要执行以下操作:
onswip
事件,并在viewModel
中调用remove
方法remove
方法应通过删除元素来修改您的currentList
。您可以将id
传递给remove
方法,以简化操作currentList
是LiveData
每个观察者都会收到通知
房间数据库
中获取随机条目currentList
。为此,您可以使用LiveData
的Transformations
APIcurrentList
是LiveData
,每个观察者都会收到通知
多谢各位。然而,ViewModel中的remove方法应该是什么样子?(假设我必须从Livedata中删除)
private MutableLiveData currentList=new MutableLiveData()代码>列表
本质上是不可更改的,即不能添加和删除。要实现这一点,最好使用ArrayList
。您只需调用列表中的currentList.remove(element)
,即可。我的适配器不知道通过滑动删除了哪个项目。当我刷卡时,当前数据会被更新和删除;但当我刷下一个,是更新和删除,但不是从视图;同时,第三个从视图中删除(因为适配器尝试查找项1而不是项0,而在删除项0之后,项1已成为项0,项2已分别成为项1,但适配器不知道这一点,我不知道如何同步此项..)您不需要在适配器上设置这些操作,因为适配器的任务是管理列表本身,而不是元素。在ViewHolder
类中设置这些onClickListeners
。您的ViewHolder
将具有Person
元素。一个干净的解决方案是创建一个EventListener
接口。将此EventListener
作为参数
传递给适配器
。EventListener
实例显然就是您的viewModel
。同样在RecyclerView
的onBindInstance()
方法中,将EventListener
传递给ViewHolder
a
private MutableLiveData<List<Person>> currentList = new MutableLiveData<>();