webView.getScrollY() returns always 0

T

tefracky

App-Anbieter (kostenlos)
184
Hallo zusammen,

ich habe ein Problem mit WebView und ScrollRefresh. Es ist so, dass meine Webview sich grundsätzlich immer aktualisiert, auch wenn ich nur scrollen möchte. Eigentlich sollte das der untenstehende Code verhindern, aber die Ausgabe zeigt, dass für webView.getScrollY() immer 0 ausgegeben wird. Woran könnte das liegen bzw. wie lässt sich das Problem beheben? Meine Vermutung ist, dass es etwas damit zu tun hat, dass bei manchen Webseiten die Kopfzeile gefixt ist und dass deswegen immer 0 rauskommt. Allerdings hilft mir das nicht weiter.

Gruß

Tefracky

Code:
@Override
public void onStart() {
    super.onStart();

    swipeRefreshLayout.getViewTreeObserver().addOnScrollChangedListener(mOnScrollChangedListener=new ViewTreeObserver.OnScrollChangedListener(){
                @Override
                public void onScrollChanged() {
                    if (webView.getScrollY() == 0) {
                        System.out.println("Test: " + webView.getScrollY());
                    swipeRefreshLayout.setEnabled(true);
                    } else {
                        System.out.println("Test: " + webView.getScrollY());
                        swipeRefreshLayout.setEnabled(false);
                    }
                }
            });
}

@Override
public void onStop() {
    swipeRefreshLayout.getViewTreeObserver().removeOnScrollChangedListener(mOnScrollChangedListener);
    super.onStop();
}
 
Wenn ich das jetzt richtig verstanden habe, möchtest du ein SwipeRefreshLayout benutzen, um dein WebView zu aktualisieren wenn man von oben nach unten swiped. Ich habe das damals so gelöst:
Code:
        swipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.YourSwipeRefreshLayout);
        //swipeRefreshLayout.setColorSchemeResources(R.color.YourColor);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                YourWevView.reload();
                swipeRefreshLayout.setRefreshing(true);
            }
        });
        swipeRefreshLayout.setRefreshing(true);

        YourWevView.getSettings().setJavaScriptEnabled(true);
        YourWevView.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                swipeRefreshLayout.setRefreshing(false);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                swipeRefreshLayout.setRefreshing(true);
                super.onPageStarted(view, url, favicon);
            }
        });

Wichtig ist, dass du in der onPageFinished Methode
Code:
swipeRefreshLayout.setRefreshing(false);
ausführst, da sich dein swipeRefreshLayout ansonsten weiterdreht.
Wenn du willst kannst du, sobald eine neue URL aufgerufen wird in der onPageStarted Methode
Code:
swipeRefreshLayout.setRefreshing(true);
ausführen, um das Layout als "ProgressBar" zu verwenden. Gestoppt wird es wieder, wenn die Seite fertig geladen wurde:
Code:
@Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                swipeRefreshLayout.setRefreshing(false);
            }

Im Layout das WebView ins SwipeRefreshLayout packen:

Code:
<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/YourSwipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:id="@+id/YourwebView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

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

Ähnliche Themen

kukuk
Antworten
9
Aufrufe
1.180
kukuk
kukuk
I
Antworten
8
Aufrufe
1.215
IIIGeorgeIII
I
L
Antworten
2
Aufrufe
745
lg-89
L
Zurück
Oben Unten