Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Firestore的回收器视图在数据更改时位于顶部_Android_Google Cloud Firestore_Android Recyclerview - Fatal编程技术网

Android 使用Firestore的回收器视图在数据更改时位于顶部

Android 使用Firestore的回收器视图在数据更改时位于顶部,android,google-cloud-firestore,android-recyclerview,Android,Google Cloud Firestore,Android Recyclerview,我使用了Firestore数据库的recyclerView 每当我按下feed post上的like按钮时,recycler视图就会转到第一个post。单击like按钮涉及对FeedPost对象的1次写入和1次更新操作 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceSt

我使用了Firestore数据库的recyclerView

每当我按下feed post上的like按钮时,recycler视图就会转到第一个post。单击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();
                    }
                });
    }
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图fragView=充气机。充气(R.layout.fragment_进料,容器,假);
db=FirebaseFirestore.getInstance();
feedRecyclerView=(RecyclerView)fragView.findViewById(R.id.feed\u recycler\u视图);
setUpFeedRecyclerView();
返回fragView;
}
私有void setUpFeedRecyclerView(){
setLayoutManager(新的LinearLayoutManager(getContext());
getFeed();
}
私有void getFeed(){
数据库集合(“XYZ”)
.orderBy(“发布时间”,查询。方向。降序)。限制(100)
.addSnapshotListener(新的EventListener(){
@凌驾
public void OneEvent(QuerySnapshot快照,FireBaseFireStore异常e){
如果(e!=null){
返回;
}
List feedList=新的ArrayList();
用于(QueryDocumentSnapshot文档:快照){
添加(doc.toObject(FeedPost.class));
}
feedAdapter=新的feedAdapter(feedList);
feedRecyclerView.setAdapter(feedAdapter);
feedAdapter.notifyDataSetChanged();
}
});
}

我想知道如何防止每当单击like按钮时滚动到recycler视图的顶部。

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

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