【发布时间】:2022-01-10 02:50:25
【问题描述】:
我有一个通过 RecyclerView 显示项目列表的活动。 当我单击一个项目时,它会转到另一个活动来显示它。 问题是:当我按下操作栏上的后退按钮时,它会将我带回 RecyclerView 但不在相同的滚动位置(它需要开始)。
到目前为止我尝试了什么?
-
我创建了 onPause 和 onResume 方法,以便在我按下返回键按钮时返回到相同的滚动位置 - 失败
-
我在某处读到,我可以通过以下方式实现它:
实现“androidx.recyclerview:recyclerview:1.3.0-alpha01”
然后:
mAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
它也失败了。 这是我的全班:
public class ItemsActivity extends AppCompatActivity{
private RecyclerView mRecyclerView;
private ImageAdapter mAdapter;
private FirebaseStorage mStorage;
private DatabaseReference mDatabaseRef;
private ValueEventListener mDBListener;
private List<Item> mItem;
Parcelable state;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mRecyclerView=findViewById(R.id.mRecyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //this was alone
mItem=new ArrayList<>();
mAdapter=new ImageAdapter(ItemsActivity.this,mItem);
mAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY); //added
mRecyclerView.setAdapter(mAdapter);
mStorage=FirebaseStorage.getInstance();
mDatabaseRef= FirebaseDatabase.getInstance().getReference("Item");
mDBListener = mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
mItem.clear();
for(DataSnapshot postSnapshot: snapshot.getChildren()){
Item item = postSnapshot.getValue(Item.class);
item.setKey(postSnapshot.getKey());
mItem.add(item);
}
Collections.reverse(mItem);
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(ItemsActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onPause() {
state = mRecyclerView.getLayoutManager().onSaveInstanceState();
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mRecyclerView.getLayoutManager().onRestoreInstanceState(state);
}
@Override
protected void onDestroy() {
super.onDestroy();
mDatabaseRef.removeEventListener(mDBListener);
}}
我需要改变什么?谢谢!
【问题讨论】:
标签: android android-recyclerview scroll android-actionbar position