2015-03-18 15 views
6

Sto cercando di utilizzare la posizione di scorrimento della vista Web per determinare se SwipeRefreshLayout dovrebbe essere in grado di aggiornare, ad eccezione di alcuni siti Web, ad es. https://jobs.lever.co/memebox, getScrollY() restituisce sempre 0. C'è un modo per assicurarmi che otterrò sempre la posizione di scorrimento corretta?WebView getScrollY() restituisce sempre 0

+0

Possibile duplicato di questo: http://stackoverflow.com/questions/ 2132370/android-listview-getscrolly-fa-work –

+0

Purtroppo avevo già controllato quel collegamento e non era in grado di dirmi cosa mi serviva –

risposta

1

Il sito collegato ha un'intestazione fissa. La mia ipotesi è che la pagina stessa non scorra; un contenitore al suo interno. Il WebView non può ispezionare ogni contenitore scorrevole sulla pagina, quindi vede che il contenitore di livello superiore non scorre e presuppone che l'intera cosa sia corretta.

Se tutto ciò di cui hai bisogno è pull-to-refresh, ti consiglio di aggiungere un pulsante di aggiornamento oltre allo SwipeRefreshLayout.

0

Controlla il tuo layout web. position: relative; nel tuo CSS potrebbe essere la fonte del tuo problema. Il posizionamento relativo causa problemi con lo scorrimento in WebView.

2

Forse si può provare ad aggiungere questo alla vostra WebView personalizzato

solo dire che è lo scorrimento

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 
      if(this.getScrollY() <= 0){ 
       this.scrollTo(0,1); 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
    } 
    return super.onTouchEvent(event); 
} 

e poi ignorare onScrollChanged

@Override 
protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
    super.onScrollChanged(l, t, oldl, oldt);; 
    if (iWebViewScrollListener != null && t == 0) { 
     iWebViewScrollListener .onTop(); 
    } else if (mIWebViewScroll != null && t != 0) { 
     iWebViewScrollListener .notOnTop(); 
    } 
} 

aggiungere un listener superiore richiamare durante lo scorrimento. Quando è onTop() utilizzare setEnabled(true) per SwipeRefreshLayout, altrimenti setEnabled(false)

+0

So che ci viene detto di evitare commenti di ringraziamento, ma non posso aiutare questo .. Io sp possiamo cercare di capirlo, grazie un milione di compagno! – Tssomas

0

Questo è un po 'vecchio ma questo problema esiste ancora. Per chiunque si chieda, ho risolto questo facendo quanto segue.

In GestureListener:

private class GestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 

     if(distanceY>0) webView.scrollBy(0,1); 
     else webView.scrollBy(0,-1); 
    } 
} 

Ora è possibile abilitare/disabilitare il swipeRefreshLayout correttamente utilizzando getScrollY come di seguito:

swipeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     ViewTreeObserver observer = swipeLayout.getViewTreeObserver(); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
      observer.removeOnGlobalLayoutListener(this); 
     } else { 
      observer.removeGlobalOnLayoutListener(this); 
     } 
     observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
      @Override 
      public void onScrollChanged() { 

       if (webView.getScrollY()==0) { 
        swipeLayout.setEnabled(true); 
       } else { 
        swipeLayout.setEnabled(false); 
       } 
      } 
     }); 
    } 
}); 
Problemi correlati