【发布时间】:2020-06-19 05:47:42
【问题描述】:
场景 我有 Spinner 和 RecyclerView。微调器具有三个不同的选项VIP 用户、新用户、高分用户。在 myViewModel 中,
private liveData<ArrayList<User>> userList;
public void init(int position){
switch (position){
case 0:
userList = myRepo.getInstance().getVipUser();
break;
case 1:
userList = myRepo.getInstance().getNewUser();
break;
case 2:
userList = myRepo.getInstance().getHScoreUser();
break;
}}
public LiveData<ArrayList<User>> getUserList(){return userList;}
在我的片段中,
spinner.setOnItemSelectedListener(this);
public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
myViewModel.getUserList().removeObserver(getViewLifeCycleOwner ());
myViewModel.init(pos);
myViewModel.getUserList().observe(getViewLifeCycleOwner(),
userList->{
//Attach userList to RecyclerView
}
}
一切都很顺利。但是当我在 Spinner 上选择另一个选项时。例如,当我将 VIP 用户 更改为 高分用户 时,livdata 也会观察旧数据。如果 user1,2,3 是 VIP 用户,user4,5 是高分用户,则所有 5 个用户都显示在高分用户中,而不是只显示 user4,5。
所以我想在 Spinner Selection 更改时从 livedata 中删除以前的数据。有没有办法做到这一点?
【问题讨论】:
标签: java android android-livedata android-architecture-components