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