Android防止WebView在Fragment中重新加载

4

我有一个主活动,它包含一个框架布局和4个选项卡按钮,总共有4个片段,每个片段与一个选项卡按钮相关联,根据点击的选项卡按钮,相应的片段将被交换到框架布局中以替换旧的片段。现在,在每个片段中都有一个webview,在创建片段时加载不同的URL。我的问题是如何防止Webview在每次交换片段时重新加载?以下是我交换片段的代码:

FragmentMainPage fragment = new FragmentMainPage();
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.frameLayout, fragment);
transaction.commit();
currentPage = VT_Constants.HOME_PAGE;
3个回答

3

调用replace方法会破坏片段的视图层次结构,因此当您稍后重新添加它时,视图必须被重建,这解释了您看到的行为。

尝试使用show和hide方法代替。这些方法可以维护片段的视图,所以当用户点击该片段的选项卡时,它们可以重新附加到您的活动中。像这样(尽管我不确定您希望如何获取对当前片段的引用):

FragmentMainPage fragment = new FragmentMainPage();
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
Fragment oldFragment = fm.findFragmentByTag(...); // somehow get the current fragment showing
FragmentTransaction transaction = fm.beginTransaction();
transaction.hide(oldFragment);
transaction.show(fragment);
transaction.commit();

不知何故,我似乎无法通过标签检索oldFragment...所以我采用了另一种方法,使用了viewPager。 - dulan

1

我也遇到了同样的问题。尝试更改webView设置,但都没有起作用。这不是webView的问题。

实际问题在于你的片段是ViewPager的一部分。默认情况下,viewPager将设置setOffscreenPageLimit为1。

对于一个立即的选项卡切换,您将看不到任何片段的刷新。之后,您将面临此问题。

如果您不想刷新片段,则只需向您的视图页面添加此一行即可。

mViewPager.setOffscreenPageLimit(numOfTabs);

例如:

mViewPager.setOffscreenPageLimit(10); //if you have 10 tabs

希望这能有所帮助。


如何为OP的FragmentManager获取ViewPager? - Marek J.

0

您可以设置页面限制。

viewPager.setOffscreenPageLimit(4);

网页视图不再重新加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接