WebView reloading when Fragment in ViewPager is retained form BackStack(当 ViewPager 中的 Fragment 从 BackStack 中保留时 WebView 重新加载)
问题描述
这是一个基本 Fragment
的代码,其中包含一个 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 个 Fragment
放入 ViewPager
(WebFragment
, Fragment1
和 Fragment2
分别)使用 FragmentAdapter
.我在 AndroidManifest.xml
中添加了 android:configChanges="orientation|screenSize"
(所以 WebView
不会在配置更改时重新生成).
现在我的问题是,在运行应用程序时,我将 ViewPager
的第一页(WebFragmet)更改为第二页(Fragment1
),然后我又回到了第一页.所以 WebFragment
没有问题.
现在我再次像这样 WebFragment
-->Fragment1
-->Fragment2
更改了 ViewPager
并回到了第一个通过反转上述动作的方向来翻页.但是当时我看到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 Fragment2
respectively) 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) 当 WebFragment
从 BackStack
保留时,如何防止 WebView
重新加载?
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?
只要看到这个问题并帮助我(防止 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);
这将防止您的片段重新创建以滑动两个屏幕,因此当您从 viewpager 中的第 3 页返回到第 1 页时,您的 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 中的 Fragment 从 BackStack 中保留时 WebView 重新加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:当 ViewPager 中的 Fragment 从 BackStack 中保留时 WebView 重新加载
- Xcode 7.3 中带有 UILabel 的 UIStackView 2022-01-01
- 如何在 iPhone 模拟器中重置 NSUserDefaults 数据? 2022-01-01
- SetOnItemSelectedListener上的微调程序错误 2022-01-01
- 使用自动布局向 UIScrollView 添加动态大小的视图 2022-01-01
- UITextView 内容插图 2022-01-01
- 在 Iphone SDK 的导航栏上添加多个按钮 2022-01-01
- GPS状态的广播接收器? 2022-01-01
- URL编码Swift iOS 2022-01-01
- 网上有没有好的 UIScrollView 教程? 2022-01-01
- 类似于 Mail.app 的 iPad 模态视图控制器? 2022-01-01