0
別のフラグメントからこのフラグメントに戻ると、水平RecyclerViewのスクロール位置を復元できません。だから私はそれにいくつかの水平RecyclerViewsを持っている1つのメイン垂直RecyclerViewを持っています。そして、これらの内部リストの位置を保存する必要があります。ここで私は状態を保存私の断片である:ここで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