0
当我从另一个片段回到这个片段时,我无法恢复水平RecyclerView的滚动位置。所以我有一个主要的垂直RecyclerView,其中有几个水平的RecyclerViews。我需要保存这些内部列表的位置。这里是我的片段,我在那里保存状态:无法在RecyclerView中保存状态
@Override
public void onPause() {
super.onPause();
if (outState == null){
outState = new Bundle();
}
// saves the positions in lists
Map<String, Parcelable> states = mainVideoAdapter.saveSubListState();
Iterator it = states.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
outState.putParcelable((String) pair.getKey(), (Parcelable) pair.getValue());
}
}
这里就是我所说的onSaveInstanceState()
(适配器)的代码:我检索片段这种状态
Map<String, Parcelable> states;
public Map<String, Parcelable> saveSubListState(){
states = new HashMap<>();
for (int i = 0; i < mainItems.size(); i++) {
if (!mainItems.get(i).isSliding()){
String key = mainItems.get(i).getGenreEntity().getId();
if (recyclerViews.get(key) != null){
states.put(key, recyclerViews.get(key).getLayoutManager().onSaveInstanceState());
}
}
}
return states;
}
在这里:
Bundle outState;
@Override
public void onResume() {
super.onResume();
if (outState != null){
Map<String, Parcelable> states = mainVideoAdapter.getStates();
if (states != null && !states.isEmpty()){
Iterator it = states.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
Parcelable savedRecyclerLayoutState = outState.getParcelable((String) pair.getKey());
mainVideoAdapter.getRecyclerViews().get(pair.getKey())
.getLayoutManager().onRestoreInstanceState(savedRecyclerLayoutState);
it.remove(); // avoids a ConcurrentModificationException
}
}
}
}
我做错了什么?
对不起,它并没有帮助 – alla
你删除其他的代码?从'onResume()'和'OnPause()'?你在哪里保存更改内容?需要评论或删除该代码。 –
是的。我实际上尝试了两种变体:用我的代码,没有它。 – alla