3 android android-recyclerview
我看到很多关于这个话题的相关问题,但没有一个能帮助我.我正在使用StaggeredGridLayout作为我的RecyclerView(显示卡片).每个CardView都会打开一个新活动,我面临的问题是,在新活动的背面按下,RecyclerView会滚动回到顶部.我希望它保留以前滚动的位置.
这就是我现在用来设置布局:
rv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
rv.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)
新手的任何适当的工作解决方案?
编辑:
@Override
protected void onResume() {
super.onResume();
if (listState != null) {
rvlayout.onRestoreInstanceState(listState);
}
initializeData();
}
Run Code Online (Sandbox Code Playgroud)
布局:
RecyclerView.LayoutManager rvlayout = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
和initializeData:
public void initializeData() {
rv.setLayoutManager(rvlayout);
rv.setHasFixedSize(true);
persons.clear();
c = db.rawQuery(SELECT_SQL, null);
c.moveToFirst();
if (!c.moveToFirst())
return;
while (!c.isLast()) {
id = c.getString(0);
names = c.getString(1);
age = c.getString(2);
persons.add(new Person(id,names,age));
c.moveToNext();
}
adapter = new RVAdapter(persons);
rv.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
正确的方法是保存RecyclerView滚动位置的状态,并在活动之间切换时恢复它.
protected void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putParcelable(LIST_STATE_KEY, layoutManager.onSaveInstanceState());
}
Run Code Online (Sandbox Code Playgroud)
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
Parcelable listState = state.getParcelable(LIST_STATE_KEY);
}
Run Code Online (Sandbox Code Playgroud)
@Override
protected void onResume() {
super.onResume();
if (listState != null) {
layoutManager.onRestoreInstanceState(listState);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5661 次 |
| 最近记录: |