2010-04-01 38 views
33

Ok. He buscado en TODAS PARTES y mi pequeño cerebro simplemente no puede entender una mejor manera de actualizar una actividad. Cualquier sugerencia que pueda entender sería genial. :)¿Existe alguna forma mejor de actualizar WebView?

Aquí está el código de 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); 
    } 
     }); 

    } 
} 

Y aquí está el 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> 

no me gusta la idea de volver a la actividad de apilamiento después de la actividad. Tiene que haber una manera más fácil de actualizar la vista web. Por favor ayuda. :)

Respuesta

49

1) En caso de que quiera volver a cargar la misma URL:

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

por lo que el código completo sería

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

2) También puede llamar mWebView.reload() pero tenga en cuenta esta reposts una página si la solicitud fue POST, por lo que solo funciona correctamente con GET.

+4

soooo ROCA !!! Muchas gracias. ¡Funcionó perfectamente! WHOO HOOOO !!!! :) – cdg

+0

Ahora si solo pudiera convertirlo en un widget ....: D – cdg

+0

La respuesta de Josh es la correcta. Tu seguirás recargando la misma url. –

68

Se le podría llamar un mWebView.reload(); Eso es lo que hace

+5

reload() no parece funcionar si la consulta original era un WebView.postUrl () – larham1

+0

@ larham1 tienes razón, ¿qué método funcionará? –

34

La mejor solución es simplemente hacer webView.loadUrl("javascript:window.location.reload(true)");. Esto debería funcionar en todas las versiones y no introduce nuevas entradas de historial.

+4

¡Buena solución! Sin embargo, esto requerirá que habilite JavaScript en su widget WebView con 'yourWebView.getSettings(). SetJavaScriptEnabled (true);' –

+0

Creo que esta debería ser la mejor respuesta. Como realmente no necesita especificar url basado en la mejor respuesta correcta aquí. – Ryan

9

Esto funcionó para mí.

sólo hay que poner bajo 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)");    
     } 
    }); 

Este es el código que puede volver a cargar una página web en una web View

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

Si por alguna razón WebView.reload() provoca un accidente si no logra cargar antes (algo que ver con la forma en que maneja el historial). Este es el código que uso para actualizar mi vista web. Almaceno la URL actual en 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

refrescante URL de vista web actual no es un uso común.
He utilizado este en un escenario de este tipo: Cuando el usuario pasa a otra actividad y el usuario volverá a la actividad de vista web vuelvo a cargar URL actual como esto:

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

También puede utilizar la función de vista Web reload(). Pero tenga en cuenta que si cargó la vista web con postUrl(), entonces mWebView.reload(); no funciona. Esto también funciona

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

probar esto:

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

o 'mWebView.reload()'. –

-4

Por qué no probar esto?

Código Swift para llamar dentro de la clase:

self.mainFrame.reload() 

o externa llamada

myWebV.mainFrame.reload() 
Cuestiones relacionadas