2013-02-24 4 views

Répondre

2

Créer une classe qui hérite SwipeRefreshLayout et substituez canChildScrollUp() pour vérifier si StaggeredGridView a atteint le sommet ou non, si elle a atteint le haut retour vrai sinon retourner false.

public class SwipeDownToRefrsh extends SwipeRefreshLayout{ 

PullToRefreshStaggeredGridView pullToRefreshStaggeredGridView; 

public SwipeDownToRefrsh(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 



public void canChildScrollUp (PullToRefreshStaggeredGridView pullToRefreshStaggeredGridView) { 
    this.pullToRefreshStaggeredGridView = pullToRefreshStaggeredGridView; 
} 


@Override 
public boolean canChildScrollUp() { 
    // TODO Auto-generated method stub 
    if (pullToRefreshStaggeredGridView == null) { 
     return true; 
    } else { 
     return !pullToRefreshStaggeredGridView.getRefreshableView().mGetToTop; 
    } 
} 

}

Dans votre activité ou Fragment juste envoyer l'instant de votre StaggeredGridView comme ceci:

((SwipeDownToRefrsh) holder.swipeRefreshLayout) .canChildScrollUp (holder.staggeredGridView);

+0

son meilleur de ne pas utiliser les réponses de lien seulement, comme les liens pourraient expirer laissant tout le monde à se demander quelle était la solution –

+0

Je vais vérifier et modifier ma réponse. –

+0

Chek ma réponse éditée –

10

Voilà comment j'ai essayé de résoudre le problème

d'abord, ajoutez une instance privée:

private AbsListView.OnScrollListener mOnScrollListener; 

annonce d méthode setOnClickListener public:

public void setOnScrollListener (AbsListView.OnScrollListener l) { 
    mOnScrollListener = l; 
} 

Puis, en trackMotionScroll, ajouter des lignes pour appeler l'auditeur:

private boolean trackMotionScroll(int deltaY, boolean allowOverScroll) { 
. 
. 
. 

/* HERE we call onScroll */ 
if (mOnScrollListener != null) { 
    mOnScrollListener.onScroll(null, getFirstPosition(), getChildCount(), this.mItemCount); 
} 

return deltaY == 0 || movedBy != 0; 
} 

Vous pouvez également implémenter votre propre méthode onScrollStateChanged (AbsListView view, int scrollState), mais je suis trop paresseux pour le faire: P

Enfin, vous pouvez appeler gridView.setOnScrollListener(listener) passer dans un auditeur StaggeredGridView

Hope it helps.

+0

dans StaggeredGridView ils n'ont pas de méthode pour ce setOnScrollListener (écouteur) – Saleeh

+0

Vous pouvez modifier la source et implémenter cette méthode dans la classe StaggeredGridView, car le plugin lui-même ne l'a vraiment pas. –

+1

Ceci est la solution pour le problème de l'écouteur de défilement, la réponse devrait être acceptée. –

1

j'ai rencontré le même problème, et c'est pourquoi j'ai ajouté le support de rouleau auditeur moi-même, vous pouvez trouver le projet sur github ici: méthode https://github.com/GoMino/StaggeredGridView

+0

Belle correction @gomino. J'ai fait face au même problème et je vais utiliser votre code pour cela. Merci! ps: mise à jour par le chemin. – axierjhtjz

+0

non sur l'article cliquez sur "Pourquoi?" –

Questions connexes