我有一个包含框架布局和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;
答案 0 :(得分:1)
调用replace是破坏性的:它会拆除片段的视图层次结构,所以当你稍后再添加它时,必须重建视图,这解释了你所看到的行为。
尝试显示和隐藏。它们维护片段的视图,因此当用户点击该片段的标签时,它们可以重新附加到您的活动。这样的事情(虽然我不确定你想如何获得对当前片段的引用):
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();
答案 1 :(得分:0)
您可以设置页面限制。
viewPager.setOffscreenPageLimit(4);
Webviews不再重新加载。
答案 2 :(得分:0)
我也面临着同样的问题。尝试更改webView设置,但没有一个对我有用。这不是webview的问题。
这里的实际问题是您的片段是ViewPager的一部分。 默认情况下,viewPager的setOffscreenPageLimit设置为1。
对于一个即时选项卡开关,您将看不到该片段的任何刷新。发布您将面对此问题。
如果您不想刷新片段,只需将这一行添加到视图分页器中
mViewPager.setOffscreenPageLimit(numOfTabs);
例如:
mViewPager.setOffscreenPageLimit(10); //if you have 10 tabs
希望这会有所帮助。