Android 如何保持FirebaseRecyclerAdapter的滚动位置
当我从另一个活动返回到同一活动时,我试图保持FirebaseRecyclerAdapter的滚动位置 这是我的函数,用于设置FirebaseRecyclerAdapterAndroid 如何保持FirebaseRecyclerAdapter的滚动位置,android,firebase,android-recyclerview,firebaseui,Android,Firebase,Android Recyclerview,Firebaseui,当我从另一个活动返回到同一活动时,我试图保持FirebaseRecyclerAdapter的滚动位置 这是我的函数,用于设置FirebaseRecyclerAdapter public void setTheScreen(){ FirebaseRecyclerAdapter<Post,PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post,PostViewHolder>(
public void setTheScreen(){
FirebaseRecyclerAdapter<Post,PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post,PostViewHolder>(
Post.class,
R.layout.post_display_blueprint,
PostViewHolder.class,
postsNode
) {
@Override
public void onDataChanged() {
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
}
}
@Override
protected void populateViewHolder(final PostViewHolder viewHolder, Post model, int position) {
final String key = getRef(position).getKey();
mRefPosts = FirebaseDatabase.getInstance().getReference().child("posts").child(key);
mLoveNode = mRef.child("loves");
mRefLoves = mRef.child("loves").child(key);
viewHolder.setTitle(model.getTitle());
viewHolder.setLoves(mRefLoves);
viewHolder.setLoveButton(Uid,key);
viewHolder.setImage(getApplicationContext(),model.getImageUrl());
mRefPosts.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String isAnonymous = dataSnapshot.child("anonymous").getValue(String.class);
if (isAnonymous != null && isAnonymous.equals("true")) {
viewHolder.anonymousButton.setVisibility(View.VISIBLE);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,PostDisplayPageActivity.class);
intent.putExtra("Key",key);
startActivity(intent);
}
});
}
};
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.notifyDataSetChanged();
从这2个祝酒
中,我得到了正确的位置,但视图始终从位置0开始
对于我的RecyclerView
我使用LinearLayoutManager
作为mRecyclerView.setLayoutManager(mLinearLayoutManager)
有人请告诉我我做错了什么,或者给我一个不同的建议。我用一个更简单的解决方案解决了我的问题。我刚刚调用了adapter.startListening();在onViewCreated()中,而不是在onStart中,并调用adapter.stopListening();在onDestroyView()中而不是在onStop()中 这使得整个列表在从下一个活动返回时无法重新生成,因此保留了以前的滚动位置
@Override
protected void onPause() {
super.onPause();
currentVisiblePosition = ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
Toast.makeText(MainActivity.this,String.valueOf(currentVisiblePosition),Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
setTheScreen();
mRecyclerView.getLayoutManager().scrollToPosition(currentVisiblePosition);
Toast.makeText(MainActivity.this,String.valueOf(currentVisiblePosition),Toast.LENGTH_SHORT).show();
currentVisiblePosition = 0;
}