如何解决当孩子从 Firebase 中移除时,如何使用 Repository(MVVM) 从回收器视图中移除项目?
我正在使用 Firebase 和 MVVM 将项目添加到回收站视图。我面临的问题是当孩子被添加到 Firebase 然后他们被更新到回收器视图并且 UI 发生变化时,但是当我从 Firebase 中删除项目但 UI 没有变化时,删除的内容会从 Recycler 视图中删除。 那么如何在 Repo 类中调用 OnChildRemoved 时更新适配器?
谢谢
HomeFragment 类
HomeFragment extends Fragment {
RecyclerView RecyclerView;
public ShowMemeAdapter memeAdapter;
private HomeFragmentViewModel homeFragmentViewModel;
public HomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_home,container,false);
RecyclerView = root.findViewById(R.id.recyclerViewMeme);
return root;
}
@Override
public void onViewCreated(@NonNull View view,@Nullable Bundle savedInstanceState) {
super.onViewCreated(view,savedInstanceState);
homeFragmentViewModel = new ViewModelProvider(requireActivity()).get(HomeFragmentViewModel.class);
homeFragmentViewModel.init();
memeAdapter = new ShowMemeAdapter(requireActivity(),homeFragmentViewModel.getMemeData().getValue());
homeFragmentViewModel.getMemeData().observe(getViewLifecycleOwner(),new Observer<ArrayList<MemeData>>() {
@Override
public void onChanged(ArrayList<MemeData> memeData) {
RecyclerView.setLayoutManager(new GridLayoutManager(getActivity(),3));
RecyclerView.setAdapter(memeAdapter);
memeAdapter.loadData(memeData);
memeAdapter.notifyDataSetChanged();
}
});
}
存储库类
public class Repo {
static Repo instance;
private ArrayList<MemeData> memeDataLs = new ArrayList<>();
private MutableLiveData<ArrayList<MemeData>> memeData = new MutableLiveData<>();
ChildEventListener childEventListener;
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data/XXX/");
public static Repo getInstance(){
if(instance==null)
instance = new Repo();
return instance;
}
public MutableLiveData<ArrayList<MemeData>> getData(){
childEventListener = databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot,String previousChildName) {
MemeData memeDetails = snapshot.getValue(MemeData.class);
memeDataLs.add(0,memeDetails);
memeData.setValue(memeDataLs);
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot,String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot,String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
return memeData;
}
ViewModel 类
public class HomeFragmentViewModel extends ViewModel implements LifecycleObserver {
private MutableLiveData<ArrayList<MemeData>> memeData;
public Repo repo;
public void init() {
if(memeData!=null){
return;
}
repo = new Repo();
}
public HomeFragmentViewModel(){
memeData = Repo.getInstance().getData();
}
public LiveData<ArrayList<MemeData>> getMemeData() {
return memeData;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。