当片段ViewPager保留形式的WebView重装BackStack [英] WebView reloading when Fragment in ViewPager is retained form BackStack

查看:123
本文介绍了当片段ViewPager保留形式的WebView重装BackStack的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是一个code为基本片段,其中包含一个的WebView
WebFragment.java

Here is a code for a basic Fragment which contains 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) {
    }
}
}

我有2个基本的片段也(不具有的WebView )。然后我把所有这些3 片段 ViewPager WebFragment 片段1 Fragment2 分别)使用 FragmentAdapter 。我加入安卓configChanges =方向|屏幕尺寸的Andr​​oidManifest.xml (所以的WebView 不会对CONFIGRATION变化realod)。
现在我的问题是,当运行应用程序,我改变了 ViewPager 的第一页(WebFragmet)到第2页(片段1 )我再次回到第1页。因此,没有问题 WebFragment 是因为它是。

现在,我又换了 ViewPager 这样的 WebFragment - > 片段1 - > Fragment2 键,回到第1页通过反转上述行动的方向。但当时我看到 WebFragment 的WebView 是重装。

I have 2 more basic fragments also(which doesn't have WebView). Then I put all these 3 Fragments in ViewPager(WebFragment, Fragment1 and Fragment2respectively) using FragmentAdapter. And I added android:configChanges="orientation|screenSize" in AndroidManifest.xml(So WebView will not realod on configration change).
Now my problem is, While running app I changed the 1st page (WebFragmet) of ViewPager to 2nd page(Fragment1) and again I came back to 1st page. So no problem WebFragment is as it is.

Now again I changed the ViewPager like this WebFragment-->Fragment1-->Fragment2 and came back to 1st page by reversing the direction of above action. But at that time I saw the WebView in WebFragment is reloading.

和一个问题,每当的WebView 开始加载,我可以看到像2日志条目。

And one more problem, whenever the WebView started loading I can see 2 log entry like.

WebFragment Loading...
WebFragment Loading...

所以我的问题是:
1)我如何prevent 的WebView 重装时, WebFragment BackStack保留
2)为什么要在这里的WebView 加载两次?

So my question is :
1) How can I prevent WebView reloading when the WebFragment is retained from BackStack?
2) Why here WebView loading twice?

刚刚看到这个问题,并帮助我(<一href="http://stackoverflow.com/questions/14552377/$p$pvent-webview-reloads-in-fragmentpageradapter">$p$pvent的WebView在FragmentPagerAdapter重载?)。

Just see this question and help me(Prevent WebView reloads in FragmentPagerAdapter?).

推荐答案

在您的主要活动,你已经定义viewpager

In your main activity where you have defined viewpager

viewpager喜欢这行的声明后: ViewPager viewpager =(ViewPager)findViewById(R.id.pager);

after the declaration of viewpager like this line : ViewPager viewpager = (ViewPager) findViewById(R.id.pager);

添加此行:

viewpager.setOffscreenPageLimit(2);

这将prevent从重建高达两个屏幕刷卡,你的片段,所以当你将从第3页返回第一页viewpager,你的WebView不会重新加载。

This will prevent your fragment from recreated upto swipe of two screens,so when you will return from 3rd page to 1st page in viewpager,your webview will not reload.

这篇关于当片段ViewPager保留形式的WebView重装BackStack的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆