gpt4 book ai didi

android - 如何保持 FirebaseRecyclerAdapter 的滚动位置

转载 作者:太空狗 更新时间:2023-10-29 13:52:05 25 4
gpt4 key购买 nike

当我从另一个 Activity 返回到同一 Activity 时,我试图保持我的 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();

通过单击适配器创建的任何 View ,我将从我的 MainActivity 转到一个名为 PostDisplayPageActivity 的新 Activity ,然后按回键我将完成 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;


}

从那 2 个 Toasts 我得到了正确的位置,但 View 总是从位置 0 开始。

对于我的 RecyclerView,我使用 LinearLayoutManager 作为 mRecyclerView.setLayoutManager(mLinearLayoutManager);

有人请告诉我我做错了什么,或者建议我用不同的方法来做这件事。

最佳答案

我用更简单的解决方案解决了我的问题。我刚刚调用了 adapter.startListening();在 onViewCreated() 而不是 onStart 中调用 adapter.stopListening();在 onDestroyView() 而不是 onStop()这阻止了整个列表在从下一个 Activity 返回时重新生成,从而保留了以前的滚动位置。

关于android - 如何保持 FirebaseRecyclerAdapter 的滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com