2010-04-01 16 views
33

Ok. Ich habe überall nachgesehen und mein kleines Gehirn kann einfach keinen besseren Weg, eine Aktivität zu erfrischen, verstehen. Alle Vorschläge, die ich verstehen kann, wären großartig. :)Gibt es eine bessere Möglichkeit, WebView zu aktualisieren?

Hier ist der Java-Code:

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

    } 
} 

Und hier ist die 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> 

Ich mag die Idee nicht nur Aktivität nach Tätigkeit wieder zu stapeln. Es muss einen einfacheren Weg geben, das Webview zu aktualisieren. Bitte helfen Sie. :)

Antwort

49

1) Im Fall, dass Sie die gleiche URL laden:

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

so der vollständige Code wäre

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

2) Sie können auch mWebView.reload() nennen, aber diese reposts sich bewusst sein, eine Seite, wenn die Anfrage POST war, also nur mit GET funktioniert.

+4

SIE SOOOO ROCK !!! Ich danke dir sehr. Es hat perfekt funktioniert! HOOOOOO !!!! :) – cdg

+0

Nun, wenn ich es nur in ein Widget verwandeln könnte ....: D – cdg

+0

Josh Antwort ist die richtige. Sie werden dieselbe URL immer wieder neu laden. –

68

Sie könnten eine mWebView.reload(); nennen Das ist, was es tut

+5

reload() scheint nicht zu funktionieren, wenn die ursprüngliche Abfrage ein WebView.postUrl war () – larham1

+0

@ larham1 Sie sind richtig, welche Methode wird funktionieren? –

34

Die beste Lösung ist zu tun webView.loadUrl("javascript:window.location.reload(true)"); einfach. Dies sollte bei allen Versionen funktionieren und führt keine neuen Historieneinträge ein.

+4

Schöne Lösung! Dies setzt jedoch voraus, dass Sie JavaScript in Ihrem WebView-Widget mit 'yourWebView.getSettings() aktivieren. SetJavaScriptEnabled (true);' –

+0

Ich denke, dies sollte die beste Antwort sein. Wie Sie wirklich nicht wirklich URL auf der korrekten besten Antwort hier spezifizieren müssen. – Ryan

9

Das funktionierte für mich.

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

Dies ist der Code, der eine Webseite in einem webView

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

Ja aus irgendeinem Grund WebView.reload() verursacht einen Absturz nachladen kann, wenn sie fehlgeschlagen vorher laden (etwas damit zu tun, wie es Geschichte behandelt). Dies ist der Code, mit dem ich meine Webansicht aktualisiere. Ich speichere die aktuelle URL in 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

aktuellen webview URL Refreshing ist nicht eine gemeinsame Nutzung.
habe ich dies in einem solchen Szenario: Wenn der Benutzer auf eine andere Tätigkeit und Benutzer zurück zur Webansicht Aktivität kommen geht ich aktuelle URL wie folgt neu zu laden:

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

Sie auch reload() Funktion des WebView verwenden können. Beachten Sie jedoch, dass mWebView.reload(); nicht funktioniert, wenn Sie das Webview mit postUrl() geladen haben. Dies funktioniert auch

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

try this:

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

oder 'mWebView.reload()'. –

-4

Warum dies nicht zu versuchen?

Swift Code innerhalb der Klasse zu nennen:

self.mainFrame.reload() 

oder externen Anruf

myWebV.mainFrame.reload() 
Verwandte Themen