2010-04-01 35 views
33

Ok. Tôi đã nhìn mọi nơi và bộ não nhỏ bé của tôi không thể hiểu một cách tốt hơn để làm mới một hoạt động. Bất kỳ lời đề nghị nào mà tôi có thể hiểu sẽ là tuyệt vời. :)Có cách nào tốt hơn để làm mới WebView không?

Đây là đoạn mã 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); 
    } 
     }); 

    } 
} 

Và đây là 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> 

tôi không thích ý tưởng chỉ hoạt động tái xếp chồng sau khi hoạt động. Có phải là một cách dễ dàng hơn để làm mới webview. Hãy giúp tôi. :)

Trả lời

49

1) Trong trường hợp bạn muốn tải lại cùng một URL:

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

để mã đầy đủ sẽ

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

2) Bạn cũng có thể gọi mWebView.reload() nhưng lưu ý reposts này một trang nếu yêu cầu là POST, vì vậy chỉ hoạt động chính xác với GET.

+4

BẠN SOOOO ROCK !!! Cảm ơn bạn rất nhiều. Nó hoạt động hoàn hảo! WHOO HOOOO !!!! :) – cdg

+0

Bây giờ nếu tôi chỉ có thể biến nó thành một widget ....: D – cdg

+0

Câu trả lời là đúng. Bạn sẽ tiếp tục tải lại cùng một url. –

68

Bạn có thể gọi một mWebView.reload(); Đó là những gì nó làm

+5

tải lại() dường như không hoạt động nếu truy vấn ban đầu là WebView.postUrl () – larham1

+0

@ larham1 bạn đúng, phương pháp nào sẽ hoạt động? –

34

Giải pháp tốt nhất là chỉ cần làm webView.loadUrl("javascript:window.location.reload(true)");. Điều này sẽ hoạt động trên tất cả các phiên bản và không giới thiệu các mục nhập lịch sử mới.

+4

Giải pháp tuyệt vời! Tuy nhiên, điều này sẽ yêu cầu bạn bật JavaScript trong tiện ích WebView của bạn với 'yourWebView.getSettings(). SetJavaScriptEnabled (true);' –

+0

Tôi nghĩ đây là câu trả lời hay nhất. Vì bạn thực sự không cần chỉ định url dựa trên câu trả lời đúng nhất ở đây. – Ryan

9

Điều này phù hợp với tôi.

chỉ cần đặt dưới 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)");    
     } 
    }); 

Đây là mã có thể tải lại một trang web trong một WebView

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

Có vì một lý do WebView.reload() gây ra một vụ tai nạn nếu nó thất bại để tải trước (một cái gì đó để làm với cách nó xử lý lịch sử). Đây là mã tôi sử dụng để làm mới chế độ xem web của mình. Tôi lưu trữ các url hiện tại 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

Refreshing URL hiện tại webview không phải là một sử dụng phổ biến.
tôi đã sử dụng điều này trong một kịch bản như vậy: Khi người dùng đi vào một hoạt động và người sử dụng trở lại hoạt động webview của tôi lại URL hiện tại như thế này:

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

Bạn cũng có thể sử dụng chức năng WebView của reload(). Nhưng lưu ý rằng nếu bạn đã tải chế độ xem web với postUrl() thì mWebView.reload(); không hoạt động. Điều này cũng làm

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

thử điều này:

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

hoặc 'mWebView.reload()'. –

-4

Tại sao không thử loại này?

đang Swift gọi bên trong lớp:

self.mainFrame.reload() 

bộ hay bên ngoài gọi

myWebV.mainFrame.reload() 
Các vấn đề liên quan