Android Web视图变为空
我有一个显示网络视图的片段,为了保留正在显示的网站,我保存如下状态:Android Web视图变为空,android,android-fragments,android-webview,Android,Android Fragments,Android Webview,我有一个显示网络视图的片段,为了保留正在显示的网站,我保存如下状态: @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); /*Saves the currently displayed webpage and the browser history*/ webView.saveState(outState); }
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
/*Saves the currently displayed webpage and the browser history*/
webView.saveState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_page_detail,
container, false);
webView = (WebView) rootView.findViewById(R.id.page_detail_webview);
progressBar = (ProgressBar) rootView.findViewById(R.id.op_progress);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(progress);
if (progress == 100) {
progressBar.setVisibility(View.GONE);
}
}
});
webView.setWebViewClient(new StockStreamWebViewClient());
webView.getSettings().setBuiltInZoomControls(true);
/*Restores the saved browser history if there is any*/
if (savedInstanceState != null) {
webView.restoreState(savedInstanceState);
} else if (mItem != null) {
webView.loadUrl(mItem.content);
}
return rootView;
}
然后我恢复它如下:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
/*Saves the currently displayed webpage and the browser history*/
webView.saveState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_page_detail,
container, false);
webView = (WebView) rootView.findViewById(R.id.page_detail_webview);
progressBar = (ProgressBar) rootView.findViewById(R.id.op_progress);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(progress);
if (progress == 100) {
progressBar.setVisibility(View.GONE);
}
}
});
webView.setWebViewClient(new StockStreamWebViewClient());
webView.getSettings().setBuiltInZoomControls(true);
/*Restores the saved browser history if there is any*/
if (savedInstanceState != null) {
webView.restoreState(savedInstanceState);
} else if (mItem != null) {
webView.loadUrl(mItem.content);
}
return rootView;
}
要允许用户返回WebView,我的活动中有以下代码:
@Override
public void onBackPressed() {
if (!clientFragment.onBackPressed()) {
super.onBackPressed();
}
}
}
这段代码在我的片段中:
public boolean onBackPressed() {
if (webView != null && webView.canGoBack()) {
webView.goBack();
return true;
} else {
return false;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (clientFragment != null) {
outState.putInt(CLIENT_FRAGMENT_ID, clientFragment.getId());
}
}
if (savedInstanceState != null
&& savedInstanceState.containsKey(CLIENT_FRAGMENT_ID)) {
clientFragment = (PageDetailFragment) getSupportFragmentManager()
.findFragmentById(savedInstanceState.getInt(CLIENT_FRAGMENT_ID));
}
当我旋转设备时,屏幕将正确绘制,WebView将恢复上一页,但当我按下back时,WebView为空
为什么会这样
谢谢,
安卓开发中的ANkhSimonVT正确地指出,我可能正在调用活动中的空片段或新片段
因此,我将此代码添加到我的活动中,以保存片段的ID:
public boolean onBackPressed() {
if (webView != null && webView.canGoBack()) {
webView.goBack();
return true;
} else {
return false;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (clientFragment != null) {
outState.putInt(CLIENT_FRAGMENT_ID, clientFragment.getId());
}
}
if (savedInstanceState != null
&& savedInstanceState.containsKey(CLIENT_FRAGMENT_ID)) {
clientFragment = (PageDetailFragment) getSupportFragmentManager()
.findFragmentById(savedInstanceState.getInt(CLIENT_FRAGMENT_ID));
}
此代码用于将引用还原到正确的片段:
public boolean onBackPressed() {
if (webView != null && webView.canGoBack()) {
webView.goBack();
return true;
} else {
return false;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (clientFragment != null) {
outState.putInt(CLIENT_FRAGMENT_ID, clientFragment.getId());
}
}
if (savedInstanceState != null
&& savedInstanceState.containsKey(CLIENT_FRAGMENT_ID)) {
clientFragment = (PageDetailFragment) getSupportFragmentManager()
.findFragmentById(savedInstanceState.getInt(CLIENT_FRAGMENT_ID));
}
PageDetailFragment是我的扩展片段
谢谢,
安卡