从其他选项卡返回时最后一个链接没有打开 而且 onPause() 也不起作用。它显示空指针异常并且应用程序在单击除第一个选项卡之外的其他选项卡时自动关闭。 fragment 标签代码
public class FragmentTab extends Fragment {
protected WebView myWebView;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_layout, container, false);
WebView myWebView = (WebView) v.findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});
if(savedInstanceState != null)
myWebView.restoreState(savedInstanceState);
else
myWebView.loadUrl("http://www.example.com");
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
myWebView.saveState(outState);
}
}
这是 MainActivity
public class MainActivity extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(
mTabHost.newTabSpec("tab1").setIndicator(null,ContextCompat.getDrawable(this,R.drawable.home)),
FragmentTab.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab2").setIndicator(null,ContextCompat.getDrawable(this,R.drawable.deals_offers)),
FragmentTab.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab3").setIndicator(null,ContextCompat.getDrawable(this,R.drawable.profile)),
FragmentTab.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab4").setIndicator(null, ContextCompat.getDrawable(this, R.drawable.menu)),
FragmentTab.class, null);
}
}
最佳答案
使用这个库:https://github.com/frankiesardo/icepick
从 WebView 中移除保护
@State
WebView myWebView; // This will be automatically saved and restored
在您的 Activity 方法中添加以下行,Rest 将被处理。
在 OnCreate 方法中
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
}
在onSaveInstanceState中
@Override public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
关于android - onSaveInstanceState 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265068/