ListAdapter在滚动recyclerivew时正在修改项目后复制它

问题描述 投票:0回答:1

[当我将Firestore用于数据库,并将ListAdapterView-Model一起用于设置listpaging时。现在我的查询是我成功设置了数据,但是当我用按钮更新用户like时,然后滚动后,我看到上面的更新项目向我显示下面的有限分页列表完成和新列表。请帮助我解决此查询。我的设置代码View-Models

            postListViewModel=new ViewModelProvider(getActivity()).get(PostListViewModel.class);

        PostListLiveData productListLiveData = postListViewModel.getProductListLiveData();
        if (productListLiveData != null) {


            productListLiveData.observe(getActivity(), new Observer<PostOpration>() {
                @Override
                public void onChanged(PostOpration operation) {
                    switch (operation.type) {
                        case R.string.added:
                            Posts addedProduct = operation.post;
                            addPost(addedProduct);
                            break;
                        case R.string.modified:
                            Posts modifiedProduct = operation.post;
                            modifyPost(modifiedProduct);
                            break;
                        case R.string.removed:
                            Posts removedProduct = operation.post;
                            removePost(removedProduct);
                    }
                }
                    // latestPostAdapter.notifyDataSetChanged();
                });

        }

         latestPostAdapter = new NewPostListAdapter(getActivity(),myContext,mPostList,searchString);
         mRecyclerView.setAdapter(latestPostAdapter);

    }
    private void addPost(Posts addedPost) {
        mPostList.add(addedPost);
        latestPostAdapter.submitList(mPostList);
    }

    private void modifyPost(Posts modifiedPost) {
        for (int i = 0; i < mPostList.size(); i++) {
            Posts currentProduct = mPostList.get(i);
            if (currentProduct.doc_id.equals(modifiedPost.doc_id)) {
                int position=latestPostAdapter.getItemPosition();
                System.out.println("ITEM POSITION "+i+" and "+position);
                mPostList.remove(currentProduct);
                mPostList.add(i, modifiedPost);

            }
        }
    }

    private void removePost(Posts removedPost) {
        for (int i = 0; i < mPostList.size(); i++) {
            Posts currentProduct = mPostList.get(i);
            if (currentProduct.doc_id.equals(removedPost.doc_id)) {
                mPostList.remove(currentProduct);
                latestPostAdapter.submitList(mPostList);
            }
        }
    }

请对此提供帮助,谢谢您

android android-recyclerview google-cloud-firestore listadapter android-viewmodel
1个回答
0
投票

您的addPost和removePost方法都调用latestPostAdapter.submitList(mPostList)而您的ModifyPost方法仅调用.remove()和.add()

如果还有其他内容,我希望它会出现在您的mPostList.add(),mPostList.remove()或mPostList.submitList()方法中,您是否可以发布这些内容?

© www.soinside.com 2019 - 2024. All rights reserved.