2013-03-28 3 views
0

Je veux masquer la barre d'action sur le défilement vers le haut de listview et afficher à nouveau la barre d'action en faisant défiler vers le bas de listview. Y a-t-il une méthode pour détecter le défilement haut et bas de listview? Si oui, veuillez fournir quelques références.comment détecter le défilement vers le haut dans listview

Toute aide ou conseil sera grandement apprécié.

Répondre

1
API

fournit de telles méthodes, mais ils sont protégés, de sorte que les meilleures pratiques à mon avis, est de créer la classe d'emballage (étendre ScrollView) et rendre ces méthodes publiques, notamment onScrollChanged et onOverScroll.

Vous pouvez consulter les questions suivantes pour voir comment faire:

http://pastebin.com/ePeyswyQ

Detecting the scrolling direction in the adapter (up/down)

+0

Salut Korhan Öztürk, merci pour la réponse. Suggestion du 2ème lien a fonctionné pour moi. –

+0

Salut @abhishekkumargupta! Heureux qu'il a résolu votre problème .. –

4

Peut-être que vous pouvez essayer ce qui suit pour obtenir ce fait:

listView.setOnScrollListener(new OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

     if(listView.getFirstVisiblePosition() == 0) 
      getActionBar().show(); 
     else 
      getActionBar().hide(); 
    } 
}); 
1

Une façon simple pour détecter défiler vers le haut/bas sur android listview

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){ 
    if(prevVisibleItem != firstVisibleItem){ 
    if(prevVisibleItem < firstVisibleItem) 
     //ScrollDown 
    else 
     //ScrollUp 

    prevVisibleItem = firstVisibleItem; 
} 

n'oubliez pas

yourListView.setOnScrollListener(yourScrollListener); 
2

Ceci est de l'application Android de Google IO 2014. Fournit une belle détection de défilement vers le haut ou vers le bas pour afficher/masquer la barre d'outils après le défilement de certaines lignes.

private int mActionBarAutoHideSensivity = 0; 
private int mActionBarAutoHideMinY = 0; 
private int mActionBarAutoHideSignal = 0; 
private boolean mActionBarShown = true; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
    // ... 

    ListView listView = (ListView) contentView.findViewById(R.id.listView); 
    initActionBarAutoHide(); 
    listView.setOnScrollListener(new ListViewOnScrollListener()); 

    // ... 
} 

private void initActionBarAutoHide() { 
    mActionBarAutoHideMinY = getResources().getDimensionPixelSize(R.dimen.action_bar_auto_hide_min_y); //152dp 
    mActionBarAutoHideSensivity = getResources().getDimensionPixelSize(R.dimen.action_bar_auto_hide_sensivity); //48dp 
} 

public class ListViewOnScrollListener implements OnScrollListener { 
    final static int ITEMS_THRESHOLD = 3; 
    int lastFvi = 0; 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     onMainContentScrolled(firstVisibleItem <= ITEMS_THRESHOLD ? 0 : Integer.MAX_VALUE, 
       lastFvi - firstVisibleItem > 0 ? Integer.MIN_VALUE : 
         lastFvi == firstVisibleItem ? 0 : Integer.MAX_VALUE 
     ); 
     lastFvi = firstVisibleItem; 
    } 
} 

private void onMainContentScrolled(int currentY, int deltaY) { 
    if (deltaY > mActionBarAutoHideSensivity) { 
     deltaY = mActionBarAutoHideSensivity; 
    } else if (deltaY < -mActionBarAutoHideSensivity) { 
     deltaY = -mActionBarAutoHideSensivity; 
    } 

    if (Math.signum(deltaY) * Math.signum(mActionBarAutoHideSignal) < 0) { 
     // deltaY is a motion opposite to the accumulated signal, so reset signal 
     mActionBarAutoHideSignal = deltaY; 
    } else { 
     // add to accumulated signal 
     mActionBarAutoHideSignal += deltaY; 
    } 

    boolean shouldShow = currentY < mActionBarAutoHideMinY || (mActionBarAutoHideSignal <= -mActionBarAutoHideSensivity); 
    autoShowOrHideActionBar(shouldShow); 
} 

protected void autoShowOrHideActionBar(boolean show) { 
    if (show == mActionBarShown) { 
     return; 
    } 

    mActionBarShown = show; 
    if (show) { 
     onScrollingUp(); 
    } else { 
     onScrollingDown(); 
    } 
} 

public void onScrollingUp() { 
    // ... 
} 

public void onScrollingDown() { 
    // ... 
} 
Questions connexes