是否有更好的方法来刷新WebView?

时间:2010-04-01 20:08:33

标签: android refresh webview reload

确定。我一直在寻找,而我的小脑子却无法理解更新活动的更好方法。我能理解的任何建议都会很棒。 :)

这是java代码:

package com.dge.dges;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;

public class dgeActivity extends Activity {
 WebView mWebView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings();
        mWebView.loadUrl("http://www.websitehere.php");

        Button newButton = (Button)findViewById(R.id.new_button);
        newButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    Intent intent = new Intent(dgeActivity.this, dgeActivity.class);
    startActivity(intent);
   }
        });

    }
}

这是main.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/RelativeLayout"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="#000000"

>

 <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:scrollbars="none"

 />

 <Button
  android:id="@+id/new_button"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_centerHorizontal="true"
  android:text="Refresh"
 />





</RelativeLayout>

我不喜欢在活动后重新堆叠活动的想法。必须有一种更简单的方法来刷新webview。请帮忙。 :)

9 个答案:

答案 0 :(得分:79)

你可以拨打mWebView.reload();这就是它的作用

答案 1 :(得分:56)

1)如果您想重新加载相同的网址:

mWebView.loadUrl("http://www.websitehere.php");

所以完整的代码将是

newButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    dgeActivity.this.mWebView.loadUrl("http://www.websitehere.php");
   }});

2)您也可以致电mWebView.reload(),但请注意,如果请求是POST,则会重新发布一个页面,因此只能在GET上正常使用。

答案 2 :(得分:42)

最好的解决方案就是webView.loadUrl( "javascript:window.location.reload( true )" );。这应该适用于所有版本,并不会引入新的历史记录条目。

答案 3 :(得分:11)

这对我有用。

刚刚放入onCreate metode

Button button = (Button) findViewById(R.id.reload_btn);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            web.loadUrl( "javascript:window.location.reload( true )" );             
        }
    });

这是可以在webView中重新加载网站的代码

web.loadUrl( "javascript:window.location.reload( true )" );  

答案 4 :(得分:4)

试试这个:

mWebView.loadUrl(mWebView.getUrl().toString());

答案 5 :(得分:3)

刷新当前webview的URL并不常见。
我在这种情况下使用了这个:当用户转到另一个活动并且用户回到webview的活动时,我重新加载当前的URL,如下所示:

public class MyWebviewActivity extends Activity {
    WebView mWebView;
    ....
    ....
    ....
    @Override
    public void onRestart() {
            String url = mWebView.getUrl();
            String postData = MyUtility.getOptionsDataForPOSTURL(mContext);
            mWebView.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));
    }
}

您还可以使用WebView的reload()功能。但请注意,如果您使用postUrl()加载了网页视图,则mWebView.reload();无效。这也有效

String webUrl = webView.getUrl();
mWebView.loadUrl(webUrl);

答案 6 :(得分:0)

onFormResubmission中覆盖WebViewClient

@Override
public void onFormResubmission(WebView view, Message dontResend, Message resend){
   resend.sendToTarget();
}

答案 7 :(得分:-4)

是的由于某种原因,如果WebView.reload()之前加载失败(与处理历史记录的方式有关),则会导致崩溃。这是我用来刷新webview的代码。我将当前网址存储在self.url

# 1: Pause timeout and page loading

self.timeout.pause()
sleep(1)

# 2: Check for internet connection (Really lazy way)

while self.page().networkAccessManager().networkAccessible() == QNetworkAccessManager.NotAccessible: sleep(2)

# 3:Try again

if self.url == self.page().mainFrame().url():
    self.page().action(QWebPage.Reload)
    self.timeout.resume(60)

else:
    self.page().action(QWebPage.Stop)
    self.page().mainFrame().load(self.url)
    self.timeout.resume(30)

return False

答案 8 :(得分:-4)

为什么不尝试这个?

要在类内部调用的Swift代码:

self.mainFrame.reload()

或外部电话

myWebV.mainFrame.reload()