Vis*_*jay 21 android android-webview android-fragments android-viewpager back-stack
这是一个Fragment
包含a 的基本代码WebView
.
WebFragment.java
public class WebFragment extends Fragment {
String TAG = "WebFragment";
private WebView webView;
private String currentUrl = "http://www.google.com";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.webview_layout, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
webView = (WebView) getView().findViewById(R.id.helloWebview);
initWebView();
webView.loadUrl(currentUrl);
}
@SuppressLint("SetJavaScriptEnabled")
private void initWebView() {
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e(TAG, "Loding...");
super.onPageStarted(view, url, favicon);
}
});
}
class JavaScriptInterface {
public void showHTML(String html) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还有2个基本片段(没有WebView
).然后我把所有这些3 Fragments
中ViewPager
(WebFragment
,Fragment1
并Fragment2
分别使用)FragmentAdapter
.我加入android:configChanges="orientation|screenSize"
的AndroidManifest.xml
(所以WebView
不会在CONFIGRATION变化realod).
现在我的问题是,在运行应用程序时,我将第一页(WebFragmet)更改ViewPager
为第二页(Fragment1
),然后我又回到了第一页.所以没有问题WebFragment
.
现在我再次改变了ViewPager
这个WebFragment
- > Fragment1
- > Fragment2
并通过颠倒上述动作的方向回到第1页.但在那个时候,我看到了WebView
在WebFragment
重新加载.
还有一个问题,无论何时WebView
开始加载,我都可以看到2个日志条目.
WebFragment Loading...
WebFragment Loading...
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
1)如何保留WebView
重新加载?
2)为什么这里加载两次?WebFragment
BackStack
WebView
只是看到这个问题并帮助我(在FragmentPagerAdapter中阻止WebView重新加载?).
Chi*_*hah 29
在您已定义viewpager的主活动中
在宣告viewpager之后,就像这一行:
ViewPager viewpager = (ViewPager) findViewById(R.id.pager);
添加此行:
viewpager.setOffscreenPageLimit(2);
Run Code Online (Sandbox Code Playgroud)
这将阻止您的片段重新创建到两个屏幕的滑动,因此当您从viewpager的第3页返回到第1页时,您的webview将不会重新加载.
这是一个典型的案例,它成为通过覆盖android:configChanges
来解决问题的简单补丁修复的受害者。不幸的是,配置更改的发生有多种原因。所以简单地捕捉屏幕尺寸的变化会错过很多......正如你所发现的。
首先,彻底删除android:configChanges
. 然后将以下内容添加到您的WebView
片段中。
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
Run Code Online (Sandbox Code Playgroud)
调整您的 WebView 片段的onActivityCreated
方法以包括以下内容:
public void onActivityCreated(Bundle savedInstanceState) {
webView = (WebView) getView().findViewById(R.id.helloWebview);
initWebView();
if (savedInstanceState != null)
webView.restoreState(savedInstanceState);
else
webView.loadUrl(currentUrl);
Run Code Online (Sandbox Code Playgroud)
}
这应该让你朝着正确的方向前进。注意,调用 aWebView
的 saveState() 不会保存显示数据。例如,输入标签不会保留用户输入。您需要手动解析网页以保留该数据。根据您使用 WebView 的目的,这将是一个主要的痛苦。
归档时间: |
|
查看次数: |
7635 次 |
最近记录: |