RAH*_*DEY 5 android firebase android-recyclerview firebaseui
FirebaseRecyclerAdapter
当我从另一个活动返回到同一个活动时,我试图保持我的滚动位置。
这是我的功能,它设置 FirebaseRecyclerAdapter
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();
Run Code Online (Sandbox Code Playgroud)
}
通过单击适配器创建的任何视图,我将从我的MainActivity转到一个名为PostDisplayPageActivity的新活动,然后按下我正在完成PostDisplayPageActivity并返回MainActivity。
当我回到我的 MainActivity 时,列表从 0 位置开始
我在 onPause 和 onResume 方法中使用了以下代码,但它不起作用。
@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;
}
Run Code Online (Sandbox Code Playgroud)
从那两个Toasts
我得到正确的位置,但视图总是从位置 0 开始。
对于我,RecyclerView
我使用的LinearLayoutManager
是mRecyclerView.setLayoutManager(mLinearLayoutManager);
有人请告诉我我做错了什么或建议我一种不同的方法来做到这一点。
小智 2
我用一个更简单的解决方案解决了我的问题。我刚刚调用了adapter.startListening(); 在onViewCreated()而不是onStart中调用adapter.stopListening(); 在 onDestroyView() 而不是 onStop() 中,这阻止了从下一个活动返回时重新生成整个列表,从而保留了之前的滚动位置。
归档时间: |
|
查看次数: |
599 次 |
最近记录: |