web-dev-qa-db-fra.com

Ajout de tirer pour actualiser la vue Web pour actualiser

Je vais ajouter tirer pour actualiser ma vue Web afin de rafraîchir ma vue Web. J'ai vu toutes les questions sur cette page mais je ne trouve pas le bon moyen d'ajouter des éléments à rafraîchir ... 

Mainactivity.Java

package com.vvhvb.hesselfeenstra.vvheerenveenseboys;

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String url ="http://heerenveenseboys.nl/";
        WebView view=(WebView) this.findViewById(R.id.webView);
        view.getSettings().setJavaScriptEnabled(true);
        view.getSettings().setBuiltInZoomControls(true);
        view.getSettings().setDisplayZoomControls(false);
        view.setWebViewClient(new WebViewClient());
        view.loadUrl(url);

    }

}

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.vvhvb.hesselfeenstra.vvheerenveenseboys.MainActivity"
    tools:showIn="@layout/activity_main">

    <WebView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:id="@+id/webView"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:layout_alignParentEnd="true"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentStart="true" />
</RelativeLayout>

J'espère que tout le monde pourra m'aider et résoudre ce problème pour moi. 

9
Hessel

Vous pouvez envelopper la vue Web dans la disposition d'actualisation de glisser comme ceci

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.vvhvb.hesselfeenstra.vvheerenveenseboys.MainActivity"
tools:showIn="@layout/activity_main">

<Android.support.v4.widget.SwipeRefreshLayout
    Android:id="@+id/swipeContainer"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <WebView
        Android:id="@+id/webView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentEnd="true"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentRight="true"
        Android:layout_alignParentStart="true"
        Android:layout_alignParentTop="true" />

</Android.support.v4.widget.NestedScrollView>
</Android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>

En java

package com.vvhvb.hesselfeenstra.vvheerenveenseboys;

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
WebView view;
SwipeRefreshLayout mySwipeRefreshLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);
    String url ="http://heerenveenseboys.nl/";
    view=(WebView) this.findViewById(R.id.webView);
    view.getSettings().setJavaScriptEnabled(true);
    view.getSettings().setBuiltInZoomControls(true);
    view.getSettings().setDisplayZoomControls(false);
    view.setWebViewClient(new WebViewClient());
    view.loadUrl(url);

    mySwipeRefreshLayout.setOnRefreshListener(
    new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        view.reload();
    }
    }
    );

}

}
22
jitinsharma

Je pense que la meilleure solution consiste à utiliser SwipeRefreshLayout mais sans NestedScrollView à l'intérieur comme jitinsharma décrit, parce que ce problème possible: la hauteur de la vue Web augmente indéfiniment dans un nestedScrollView . Mais il existe une autre solution pour le problème de défilement décrit par vizZ , pour implémenter ViewTreeObserver.OnScrollChangedListener.Ainsi, une solution de travail devrait ressembler à ceci:

<Android.support.v4.widget.SwipeRefreshLayout
        Android:id="@+id/swipeContainer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <RelativeLayout
            Android:id="@+id/nonVideoLayout"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:windowSoftInputMode="adjustResize">

            <WebView
                Android:id="@+id/main_web_view"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_marginTop="5dp"
                Android:windowSoftInputMode="adjustResize"
                app:layout_constraintDimensionRatio="1" />

        </RelativeLayout>


    </Android.support.v4.widget.SwipeRefreshLayout>

Paramètres d'activité:

private WebView mWebView;
private SwipeRefreshLayout mySwipeRefreshLayout;
private ViewTreeObserver.OnScrollChangedListener mOnScrollChangedListener;   

sur l'activité onCreate:

mWebView = (WebView) findViewById(R.id.main_web_view);
mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);

        mySwipeRefreshLayout.setOnRefreshListener(
                new SwipeRefreshLayout.OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        mWebView.reload();
                    }
                }
        );

et outillage d'activité: implements AdvancedWebView.Listener

sur l'activité onStop

mySwipeRefreshLayout.getViewTreeObserver().removeOnScrollChangedListener(mOnScrollChangedListener);

et Activité onStart:

 mySwipeRefreshLayout.getViewTreeObserver().addOnScrollChangedListener(mOnScrollChangedListener =
                new ViewTreeObserver.OnScrollChangedListener() {
                    @Override
                    public void onScrollChanged() {
                        if (mWebView.getScrollY() == 0)
                            mySwipeRefreshLayout.setEnabled(true);
                        else
                            mySwipeRefreshLayout.setEnabled(false);

                    }
                });
7
Mihuilk

https://developer.Android.com/training/swipe/add-swipe-interface.html

Vous pouvez utiliser la disposition Balayer pour actualiser, elle est facile à utiliser et s’occupe de l’animation d’actualisation à votre place.

Vous pouvez ajouter un OnRefreshListener pour actualiser votre vue Web.

1
Vaibhav

Essayez ceci si vous voulez simplement tirer pour rafraîchir

    ll = (LinearLayout)findViewById(R.id.CategorySelect_lLayout_noID);
ll.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {

        if(event.getAction() == MotionEvent.ACTION_DOWN){
            Toast.makeText(CategorySelect.this, "action DOWN called", Toast.LENGTH_SHORT).show();
            return true;
        } 

        return false;
    }
});
    return true;
}

Ou si vous voulez une icône ou quelque chose comme chrome

https://github.com/liaohuqiu/Android-Ultra-Pull-To-Refresh

0
Yash Jain

Cela devrait fonctionner parfaitement! Dans votre fichier de présentation, placez la vue Web dans un SwipeRefreshLayout.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/activity_main"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    >
    <Android.support.v4.widget.SwipeRefreshLayout
        Android:id="@+id/swipeContainer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
    >
    <WebView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentStart="true"
        Android:id="@+id/webView"
       />
    </Android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>

Dans votre fichier Java, déclarez SwipeRefreshLayout mySwipeRefreshLayout; en dehors de la classe . Ajoutez ensuite ceci à la méthode onCreate()

    mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);

        mySwipeRefreshLayout.setOnRefreshListener(
                        new SwipeRefreshLayout.OnRefreshListener() {
                            @Override
                            public void onRefresh() {
                                    mWebview.reload();
        mWebview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
// This is important as it forces webview to load from the instead of reloading from cache

        mWebview .loadUrl(getString(R.string.app_link));

                            }
                        }
                );
0
Rahul Suresh