Android 使用Firestore的回收器视图在数据更改时位于顶部
我使用了Firestore数据库的recyclerView 每当我按下feed post上的like按钮时,recycler视图就会转到第一个post。单击like按钮涉及对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
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
并让它处理所有这些用例