【问题标题】:Recycler View using Firestore goes to top on data changed使用 Firestore 的 Recycler View 在数据更改时显示在顶部
【发布时间】:2020-02-26 19:28:18
【问题描述】:

我在 Firestore 数据库中使用了 recyclerView。

每当我按下提要帖子上的“赞”按钮时,回收站视图往往会转到第一个帖子。单击like 按钮涉及对FeedPost 对象的1 次写入和1 次更新操作。

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View fragView = inflater.inflate(R.layout.fragment_feed, container, false);
        db = FirebaseFirestore.getInstance();    
        feedRecyclerView = (RecyclerView)fragView.findViewById(R.id.feed_recycler_view);
        setUpFeedRecyclerView();
        return fragView;
    }


    private void setUpFeedRecyclerView() {
        feedRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        getFeed();

    }

    private void getFeed() {

        db.collection("XYZ")
                .orderBy("time_posted", Query.Direction.DESCENDING).limit(100)
                .addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(QuerySnapshot snapshots, FirebaseFirestoreException e) {
                        if (e != null) {

                            return;
                        }
                        List<FeedPost> feedList = new ArrayList<>();
                        for (QueryDocumentSnapshot doc : snapshots) {

                            feedList.add(doc.toObject(FeedPost.class));
                        }

                        feedAdapter = new FeedAdapter(feedList);
                        feedRecyclerView.setAdapter(feedAdapter);
                        feedAdapter.notifyDataSetChanged();
                    }
                });
    }

我想知道在点击赞按钮时如何防止滚动到回收站视图的顶部。

【问题讨论】:

    标签: android google-cloud-firestore android-recyclerview


    【解决方案1】:

    避免在事件回调中设置适配器。在设置视图时设置适配器并更新内部数据(最好使用正确的 notifyItemInserted/Removed/etc 方法)。

    【讨论】:

      【解决方案2】:

      处理这个问题的最佳方法是使用FirestoreRecyclerAdapter 并让它处理所有这些用例。

      https://github.com/firebase/FirebaseUI-Android/tree/master/firestore#using-the-firestorerecycleradapter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        • 2021-10-12
        • 2022-01-03
        • 1970-01-01
        • 2022-01-11
        相关资源
        最近更新 更多