スクロール位置の復元 Fragment 画面遷移で戻った時、スクロール位置を復元したい。
これは必要なし!
クリックでFragment 画面遷移の場合
Click => onDestroyView() => 呼ばれるFragment実行
戻った時、onCreateView onResume が呼ばれる。
onCreateが呼ばれない。ここがミソ。
スクロール位置復元はSaveInstanceState を使わなくても。
クリック時にスクロール位置を取得しておけばよい。
mScrollY = mScrollView.getScrollY();
で、Resumeで scrollTo してあげる。
mScrollView =(ScrollView)getActivity().findViewById(R.id.scrollView);
mScrollView.post(new Runnable(){
public void run()
{ //mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
// mScrollView.scrollTo(0,mScrollY);
}
});
onCreateが呼ばれないので、mScrollYは保持してる。
mScrollView.post(new Runnable(){ してあげないと scrollTo しない。
理由は不明。
**************Intentの場合*******************
Androidは機種メーカーによって、ライフサイクルが違う場合がある。
画面遷移から戻った時、Listview RecyclerView ScrollView など、元の状態に戻らない機種がある。
Intent して戻った時、onCreate を実行しない機種はOK
onCreate を実行する機種は上記のような処理が必要。SaveInstanceStateが必要。
画面内容、スクロール位置の復元は自分でやれという事だ。