Navigation Drawer をホストする単純なアクティビティがあります。そのエントリの 1 つは WebView で、読み込みに時間がかかります (Gmail が表示されるため、厄介なリダイレクトをすべてたどるのにかなりの時間がかかります)。
異なる選択が発生した場合でも、フラグメントを保持したいと思います。これらのソリューションが機能する可能性があると考えました。彼らはしませんでした。
1) フラグメントを再作成しない: mWebmailFragmentが実際にはnullでなくても、いずれにせよ onCreateView() が呼び出されます。
private Fragment mWebmailFragment /*, the others */;
public void selectItem(int position) {
Fragment fragment = null;
switch (position) {
case FRAGMENT_CODE_WEBMAIL:
mWebmailFragment = mWebmailFragment!=null ? mWebmailFragment : new WebmailFragment();
fragment = mWebmailFragment;
break;
// ...
}
2) onCreateView() が呼び出された場合、WebView オブジェクトの状態を保持すると機能する場合があります。そうではありません: デバッグ 私は、savedInstanceState が常にnull であることを発見しました。どうしてか分かりません。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
// Retain instance
setRetainInstance(true);
//....
// SavedState
if (savedInstanceState != null) {
mWebView.restoreState(savedInstanceState);
} else {
// do stuff
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}