我有一个简单的活动,其中托管了一个导航抽屉。其中一个条目是 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总是空的。我不知道为什么。
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);
}