Есть ли лучший способ обновить WebView? - PullRequest
43 голосов
/ 02 апреля 2010

Хорошо. Я смотрел ВЕЗДЕ, и мой маленький мозг просто не может понять лучший способ освежить деятельность. Любые предложения, которые я могу понять, было бы здорово. :)

Вот код 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);
   }
        });

    }
}

А вот и 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>

Мне не нравится идея просто переставлять действия после активности. Должен быть более простой способ обновить веб-просмотр. Пожалуйста помоги. :)

Ответы [ 8 ]

80 голосов
/ 04 апреля 2010

Вы можете назвать mWebView.reload(); Это то, что он делает

58 голосов
/ 02 апреля 2010

1) Если вы хотите перезагрузить тот же URL:

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

, поэтому полный код будет

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

2) Вы также можете позвонить по номеру mWebView.reload(), но имейте в виду, что это повторное размещение страницы, если запрос был POST, поэтому корректно работает только с GET.

42 голосов
/ 07 августа 2011

Лучшее решение - просто сделать webView.loadUrl( "javascript:window.location.reload( true )" );. Это должно работать на всех версиях и не вводить новые записи истории.

11 голосов
/ 07 февраля 2013

Это сработало для меня.

просто добавьте метод onCreate

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

Это код, который может перезагрузить веб-сайт в веб-представлении

web.loadUrl( "javascript:window.location.reload( true )" );  
4 голосов
/ 16 августа 2014

попробуйте это:

mWebView.loadUrl(mWebView.getUrl().toString());
3 голосов
/ 08 ноября 2013

Обновление URL текущего веб-просмотра не является распространенным явлением.
Я использовал это в таком сценарии: когда пользователь переходит к другому действию и пользователь возвращается к действию веб-просмотра, я перезагружаю текущий URL-адрес следующим образом:

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

Вы также можете использовать функцию reload() WebView. Но обратите внимание, что если вы загрузили веб-просмотр с postUrl(), то mWebView.reload(); не будет работать. Это также работает

String webUrl = webView.getUrl();
mWebView.loadUrl(webUrl);
0 голосов
/ 10 декабря 2014

Почему бы не попробовать это?

Код Swift для вызова внутри класса:

self.mainFrame.reload()

или внешний звонок

myWebV.mainFrame.reload()
0 голосов
/ 16 сентября 2013

Да по какой-то причине WebView.reload () вызывает сбой, если он не загружался раньше (что-то связанное с тем, как он обрабатывает историю). Это код, который я использую для обновления своего веб-просмотра. Я храню текущий URL в 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
...