2014-08-28 85 views
1

我有一个ListView,当我滚动向下或向上,我可以使用此解决方案检测这样的:当滚动回来显示的动作条,而上一个ListView滚动起来

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(); 
    } 
}); 

这样的作品和ActionBar节目到列表的第一项。当我开始在列表中向上滚动时,我还想再次显示ActionBar

编辑:

这是最后的方式,它的工作原理并不总是..有时动作条消失,永远不会回来:

private int mPreviousFirst; 
... 
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(prevVisibleItem != firstVisibleItem){ 
     if (firstVisibleItem < mPreviousFirst) 
      getActionBar().show(); 
     else 
      getActionBar().hide(); 

     mPreviousFirst = firstVisibleItem; 
     } 
    } 
}); 

我很接近,但不顺心的事:(

+0

你可以检讨你发布?我认为一些信息丢失了,这些情况使得很难理解你的问题。 – reporter 2014-08-28 12:54:21

回答

0

您可以尝试操纵您的视图中的以下onScrollChanged,

onScrollChanged

它跟踪当前和以前的滚动状态。如果你正在上升,那么你可以做同样的行为。

东西类似于以下会达到你的要求:

private int mPreviousFirst; 
... 
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 (firstVisibleItem < mPreviousFirst) { 
      getActionBar().show(); 
     } else if (firstVisibleItem > mPreviousFirst) { 
      getActionBar().hide(); 
     } 
     mPreviousFirst = firstVisibleItem; 

    } 
}); 
0

可以通过保存先前的第一个可见的位置每次发生变化时这样做为我工作在kitkat

+0

mmh ..现在它出现并消失时,它想:) – 2014-08-28 13:05:30

+0

你可以看看我的编辑请? – 2014-08-28 13:12:54

+0

@ End.Game我已经更新了我的答案,之前是错误的。但请注意,这不是最好的办法。 – Simas 2014-08-28 13:14:31

0
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { 
     int mLastFirstVisibleItem = 0; 

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

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      if (view.getId() == mListView.getId()) { 
       final int currentFirstVisibleItem = mListView.getFirstVisiblePosition(); 

       if (currentFirstVisibleItem > mLastFirstVisibleItem) { 
        // getSherlockActivity().getSupportActionBar().hide(); 
        activity.hideActionBar(); 
       } else if (currentFirstVisibleItem < mLastFirstVisibleItem) { 
        // getSherlockActivity().getSupportActionBar().show(); 
        activity.showActionBar(); 
       } 

       mLastFirstVisibleItem = currentFirstVisibleItem; 
      } 
     } 
    }); 

这样的:

@Override 
protected void onScrollChanged (int currentHorizontalPosition, int currentVerticalPosition, int oldHorizontalPosition, int oldVerticalPosition) 
{ 
    if(currentVerticalPosition < oldVerticalPosition && positionDifference > threshold) 
    { 
     getActionBar().show(); 
    } 
    else //condition for downscroll or other actions. 
    { 
     getActionBar().hide(); 
    } 
}