2010-04-01 29 views
33

Ok. Ho guardato OVUNQUE e il mio piccolo cervello non riesce a capire un modo migliore per aggiornare un'attività. Qualsiasi suggerimento che riesco a capire sarebbe fantastico. :)C'è un modo migliore per aggiornare WebView?

Ecco il codice 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); 
    } 
     }); 

    } 
} 

Ed ecco la 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> 

Non mi piace l'idea di appena ri-stacking l'attività dopo l'attività. Ci deve essere un modo più semplice per aggiornare la visualizzazione Web. Per favore aiuto. :)

risposta

49

1) Nel caso in cui si desidera ricaricare la stessa URL:

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

in modo che il codice completo sarebbe

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

2) È anche possibile chiamare mWebView.reload() ma essere consapevoli questo le ripubblica una pagina se la richiesta era POST, quindi funziona solo correttamente con GET.

+4

YOU SOOOO ROCK !!! Grazie mille. Ha funzionato perfettamente! WHOO HOOOO !!!! :) – cdg

+0

Ora, se solo potessi trasformarlo in un widget ....: D – cdg

+0

Josh la risposta è quella giusta. Continuerai a ricaricare lo stesso URL. –

68

Si potrebbe chiamare un mWebView.reload(); Questo è ciò che fa

+5

reload() non sembra funzionare se la query originale era WebView.postUrl () – larham1

+0

@ larham1 hai ragione, quale metodo funzionerà? –

34

La soluzione migliore è quella di fare proprio webView.loadUrl("javascript:window.location.reload(true)");. Questo dovrebbe funzionare su tutte le versioni e non introduce nuove voci di cronologia.

+4

Bella soluzione! Tuttavia, ciò richiede l'abilitazione di JavaScript nel widget WebView con 'yourWebView.getSettings(). SetJavaScriptEnabled (true);' –

+0

Penso che questa dovrebbe essere la risposta migliore. Dato che non hai davvero bisogno di specificare l'url in base alla migliore risposta corretta qui. – Ryan

9

Questo ha funzionato per me.

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

Questo è il codice che può ricaricare un sito web in una WebView

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

Sì, per qualche motivo WebView.reload() causa un crash se non è riuscito caricare prima (qualcosa da fare con il modo in cui gestisce la cronologia). Questo è il codice che uso per aggiornare la mia webview. I memorizzare l'URL corrente 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

rinfrescante URL del WebView corrente non è un uso comune.
Ho usato questo in un tale scenario: Quando l'utente va in un'altra attività e l'utente tornare all'attività di WebView ricarico URL corrente come questo:

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

È inoltre possibile utilizzare la funzione di WebView reload(). Ma nota che se hai caricato la webview con postUrl(), allora mWebView.reload(); non funziona. Questo funziona anche

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

provare questo:

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

o 'mWebView.reload()'. –

-4

Perché non provare questo?

codice Swift chiamare all'interno della classe:

self.mainFrame.reload() 

o esterna chiamata

myWebV.mainFrame.reload() 
Problemi correlati