2010-04-01 8 views
33

Ok. Spojrzałem WSZĘDZIE, a mój mały mózg po prostu nie może zrozumieć lepszego sposobu na odświeżenie działania. Wszelkie sugestie, które mogę zrozumieć, będą świetne. :)Czy istnieje lepszy sposób na odświeżenie WebView?

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

    } 
} 

A oto 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> 

nie podoba mi się pomysł po prostu ponowne układanie działalność po działalności. Musi być łatwiejszy sposób na odświeżenie widoku. Proszę pomóż. :)

Odpowiedz

49

1) W przypadku, gdy chcesz odświeżyć ten sam adres URL:

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

tak pełny kod będzie

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

2) Można również zadzwonić mWebView.reload() jednak mieć świadomość tego reposts strona, jeśli żądanie było POST, więc działa poprawnie tylko z GET.

+4

TY SOOOO ROCK !!! Dziękuję bardzo. Działało idealnie! WHOO HOOOO !!!! :) – cdg

+0

Teraz, gdybym mógł go zmienić w widget ...: D – cdg

+0

Odpowiedź Josha jest poprawna. Twój nadal będzie przeładowywał ten sam URL. –

68

Można nazwać mWebView.reload(); To co robi

+5

reload() nie działa, jeśli pierwotne zapytanie było WebView.postUrl () – larham1

+0

@ larham1 masz rację, która metoda zadziała? –

34

Najlepszym rozwiązaniem jest po prostu zrobić webView.loadUrl("javascript:window.location.reload(true)");. Powinno to działać we wszystkich wersjach i nie wprowadzać nowych wpisów historii.

+4

Ładne rozwiązanie! Wymaga to jednak włączenia JavaScript w widżecie WebView za pomocą 'yourWebView.getSettings(). SetJavaScriptEnabled (true);' –

+0

Myślę, że to powinna być najlepsza odpowiedź. Tak naprawdę nie musisz podawać adresu URL na podstawie poprawnej najlepszej odpowiedzi tutaj. – Ryan

9

To zadziałało dla mnie.

wystarczy umieścić pod 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)");    
     } 
    }); 

Jest to kod, który może przeładować stronę internetową w Webview

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

Tak z jakiegoś powodu WebView.reload() powoduje awarię, jeśli nie udało wczytać wcześniej (co ma związek ze sposobem, w jaki obsługuje historię). To jest kod, którego używam do odświeżania mojej przeglądarki. I zachować bieżący adres URL w 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

Odświeżanie URL bieżącego Webview nie jest powszechne użycie.
użyłem tego w takim scenariuszu: Kiedy użytkownik przechodzi do innej aktywności użytkownika i wrócić do aktywności Webview za I przeładować aktualny adres URL tak:

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

Można również użyć funkcji Webview reload() użytkownika. Zauważ jednak, że jeśli załadowałeś widok internetowy z postUrl(), to nie działa mWebView.reload();. Działa to również

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

spróbuj tego:

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

lub 'mWebView.reload()'. –

-4

Dlaczego nie spróbować tego?

Kod Swift zadzwonić wewnątrz klasy:

self.mainFrame.reload() 

lub zewnętrzne połączenia

myWebV.mainFrame.reload()