2014-08-28 78 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(); 
    } 
}