2010-04-01 61 views
33

好的。我已经看到了无处不在,我的小脑袋也无法理解更好的方式来刷新活动。任何我能理解的建议都会很棒。 :)有没有更好的方法来刷新WebView?

下面是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> 

我不喜欢的只是重新堆叠活动后,活动的想法。必须有更简单的方法来刷新Web视图。请帮忙。 :)

回答

49

1)如果你想重新加载相同的URL:

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。

+4

YOU SOOOO ROCK!非常感谢。它非常完美! WHOO HOOOO !!!! :) – cdg 2010-04-01 20:51:48

+0

现在,如果我只能把它变成一个小部件....:D – cdg 2010-04-02 03:37:06

+0

乔希的答案是正确的。您将继续重新加载相同的网址。 – 2015-03-18 13:53:34

68

你可以称之为一个mWebView.reload();这就是它

+5

如果原始查询是WebView.postUrl,则reload()似乎不起作用) – larham1 2012-08-04 00:50:25

+0

@ larham1你是正确的,哪种方法会起作用? – 2015-08-19 09:58:54

34

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

+4

很好的解决方案!但是,这将需要您在您的WebView小部件中启用JavaScript,您的web浏览器会使用 'yourWebView.getSettings()。setJavaScriptEnabled(true);' – 2012-08-15 14:56:48

+0

我认为这应该是最好的答案。正如你不会真的需要在这里指定基于正确的最佳答案的网址。 – Ryan 2017-07-13 00:48:29

9

这对我有效。

刚下的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)");    
     } 
    }); 

这是一个可以在网页视图

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

是出于某种原因WebView.reload()重新加载网页的代码导致系统崩溃,如果它失败在之前加载(与处理历史的方式有关)。这是我用来刷新我的webview的代码。我当前URL保存在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 
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()加载webview,则mWebView.reload();不起作用。这也适用

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

试试这个:

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

或'mWebView.reload()'。 – 2017-02-15 00:12:07

-4

为什么不试试呢?

斯威夫特代码里面级呼叫:

self.mainFrame.reload() 

或外部呼叫

myWebV.mainFrame.reload() 
相关问题