使用列表组织WebView解决返回页面总是刷新的问题
来源:互联网 发布:ubuntu 如何使用汉语 编辑:程序博客网 时间:2024/06/05 10:47
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout android:id="@+id/root" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"></RelativeLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity { ViewGroup mRootView; ProgressBar mProgressBar; List<WebView> mWebViews = new ArrayList<>(); List<String> mUrls = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRootView = (ViewGroup) findViewById(R.id.root); mProgressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); int height = (int) (getResources().getDisplayMetrics().scaledDensity * 3); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height); mProgressBar.setLayoutParams(layoutParams); mProgressBar.setProgressDrawable(ContextCompat.getDrawable(this, R.drawable.web_progress)); requestPage("http://www.mingtengnet.cn"); } /** * 查看是否浏览过该页面,如果是,移除该页面之后的所有页面并刷新该页面,否则使用新的WebView并入栈。 * * @param url */ private void requestPage(String url) { WebView webView = null; for (int i = 0; i < mUrls.size(); i++) { if (mUrls.get(i).equals(url)) { removePages(i + 1); webView = mWebViews.get(i); break; } } if (webView == null) { webView = generateWebView(); pushPage(webView, url); } webView.loadUrl(url); } /** * 新页面入栈。 * * @param webView * @param url */ private void pushPage(WebView webView, String url) { mUrls.add(url); mWebViews.add(webView); mRootView.addView(webView); } /** * 移除最后一个页面,出栈。 */ private void popupPage() { if (mWebViews.size() > 1) { WebView webView = mWebViews.get(mWebViews.size() - 1); webView.stopLoading(); webView.destroy(); mRootView.removeView(webView); mWebViews.remove(webView); mUrls.remove(mUrls.size() - 1); } } /** * 移除指定位置之后的页面 * * @param startIndex */ private void removePages(int startIndex) { for (int i = mWebViews.size() - 1; i >= startIndex; i--) { popupPage(); } } /** * 生成新的WebView * * @return */ private WebView generateWebView() { WebView webView = new WebView(MainActivity.this); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); webView.setLayoutParams(layoutParams); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);// webSettings.setDomStorageEnabled(true);// webSettings.setUseWideViewPort(true);// webSettings.setAllowFileAccess(true);// webSettings.setLoadWithOverviewMode(true);// webSettings.setPluginState(WebSettings.PluginState.ON);// webSettings.setSupportZoom(true);// webSettings.setMediaPlaybackRequiresUserGesture(true);// webSettings.setBuiltInZoomControls(true);// webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);//启用加速,否则滑动界面不流畅 webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { mProgressBar.setProgress(newProgress); if (newProgress == 100) { removeProgressBar(); } else { if (mProgressBar.getParent() == null) { mRootView.addView(mProgressBar); } } super.onProgressChanged(view, newProgress); } }); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && url.startsWith("tel:")) { handleTelUrl(url); } else { requestPage(url); } return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); removeProgressBar(); } }); if (mWebViews.size() > 0) { webView.setBackgroundColor(0);//解决打开新网页界面短暂空白的问题 } return webView; } private void removeProgressBar() { if (mProgressBar.getParent() != null) { mRootView.removeView(mProgressBar); } } private void handleTelUrl(String url) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); } @Override public void onBackPressed() { if (mWebViews.size() > 1) { popupPage(); } else { super.onBackPressed(); } }}
drawable/web_progress.xml
引用自 http://blog.csdn.net/finddreams/article/details/44172639/
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><item android:id="@android:id/background"> <shape> <corners android:radius="2dp" /> <gradient android:angle="270" android:centerColor="#E3E3E3" android:endColor="#E6E6E6" android:startColor="#C8C8C8" /> </shape></item><item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="2dp" /> <gradient android:centerColor="#4AEA2F" android:endColor="#31CE15" android:startColor="#5FEC46" /> </shape> </clip></item></layer-list>
阅读全文
0 0
- 使用列表组织WebView解决返回页面总是刷新的问题
- 关于webview加载网页,返回后总是刷新页面问题解决
- 解决页面跳转 返回刷新还是不刷新问题
- mui解决跳转到页面返回不刷新问题
- 解决苹果手机里面的网页返回不刷新页面的问题
- 解决,当列表进入详情页的时候,操作完使用浏览器的返回,状态依然是之前的,需要手动刷新的问题
- 解决用户注销后点击浏览器返回刷新页面重复登录的问题
- 解决onActivityResult()返回resultCode总是0的问题
- ajax页面刷新问题的解决思路
- 解决Button自动刷新页面的问题
- 2017-6-14 关于使用history.go的问题!配合原生应用嵌入H5页面(只有一个webview的的单页应用)返回历史列表记录的问题
- webview跳转页面的返回操作不成功,死循环问题
- js 页面返回上页并刷新的问题
- mui 双webview的上拉加载和下拉刷新和poppicker一起时候使用的问题以及解决
- 解决回车刷新页面问题
- 解决scriptsession 刷新页面问题
- 解决webview调用 goBack() 返回上一页自动刷新闪白的情况
- webview shouldOverrideUrlLoading 页面不能正常返回问题
- Unity框架学习笔记(一) 什么是MVC
- ACM--计算几何--平面扫描
- OpenCV图像矩阵Mat的基本操作
- 【BZOJ3812】【状压DP】【容斥原理】主旋律 题解
- C#中判断线程的状态
- 使用列表组织WebView解决返回页面总是刷新的问题
- 神经网络解结构中关键部分的构造方法
- 上传大文件到linux服务器:HFS
- 二叉树深度
- View的事件分发机制
- JavaScript学习笔记
- 机器学习名词解释(train & valid & test)(accuracy & precision & recall)
- 打地鼠游戏最终版
- js中将文件的base64转换成file并上传到服务器