2010-04-01 2 views
33

Ok. J'ai regardé partout et mon petit cerveau ne peut pas comprendre une meilleure façon de rafraîchir une activité. Toutes les suggestions que je peux comprendre seraient géniales. :)Existe-t-il un meilleur moyen d'actualiser WebView?

Voici le code 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); 
    } 
     }); 

    } 
} 

Et voici le 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> 

Je n'aime pas l'idée d'une activité juste re-empilement après l'activité. Il doit y avoir un moyen plus simple de rafraîchir le webview. S'il vous plaît aider. :)

Répondre

49

1) Si vous voulez recharger la même URL:

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

donc le code complet serait

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

2) Vous pouvez aussi appeler mWebView.reload() mais sachez ce reposts une page si la requête était POST, donc ne fonctionne correctement qu'avec GET.

+4

soooo ROCK !!! Merci beaucoup. Cela a fonctionné parfaitement! WHOO HOOOO !!!! :) – cdg

+0

Maintenant, si je pouvais seulement le transformer en un widget ....: D – cdg

+0

Josh réponse est la bonne. Votre volonté de recharger la même URL. –

68

Vous pouvez appeler un mWebView.reload(); C'est ce qu'il fait

+5

reload() ne semble pas fonctionner si la requête d'origine était un WebView.postUrl () – larham1

+0

@ larham1 vous avez raison, quelle méthode va fonctionner? –

34

La meilleure solution est de faire juste webView.loadUrl("javascript:window.location.reload(true)");. Cela devrait fonctionner sur toutes les versions et n'introduit pas de nouvelles entrées d'historique.

+4

Belle solution! Cependant, cela nécessitera que vous activiez JavaScript dans votre widget WebView avec 'yourWebView.getSettings(). SetJavaScriptEnabled (true);' –

+0

Je pense que cela devrait être la meilleure réponse. Comme vous n'aurez pas vraiment besoin de spécifier l'URL en fonction de la meilleure réponse ici. – Ryan

9

Cela a fonctionné pour moi.

vient de mettre sous 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)");    
     } 
    }); 

C'est le code qui peut recharger un site dans un webView

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

Oui pour certains WebView.reload raison() provoque un accident si elle a échoué charger avant (quelque chose à voir avec la façon dont il gère l'histoire). C'est le code que j'utilise pour actualiser mon webview. Je stocke l'adresse actuelle dans 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

Rafraîchissant URL de WebView actuelle n'est pas un usage courant.
J'ai utilisé ce dans un tel scénario: Lorsque l'utilisateur passe à une autre activité et l'utilisateur de revenir à l'activité de WebView je recharge URL actuelle comme ceci:

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

Vous pouvez également utiliser la fonction de WebView reload(). Mais notez que si vous avez chargé le webview avec postUrl(), alors mWebView.reload(); ne fonctionne pas. Cela fonctionne également

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

essayez ceci:

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

ou 'mWebView.reload()'. –

-4

Pourquoi ne pas essayer?

Code Swift pour appeler en classe:

self.mainFrame.reload() 

ou appel externe

myWebV.mainFrame.reload() 
Questions connexes