2014-08-28 2 views
1

У меня есть ListView и когда я прокручиваю вниз или вверх, я могу обнаружить это с помощью этого решения:Показать ActionBar при прокрутке вверх на 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, когда я начну прокрутку вверх по списку.

EDIT:

это последний путь, и он работает не всегда .. иногда 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

ответ

0

Вы можете попробовать манипулировать следующие onScrollChanged в вашей точки зрения,

onScrollChanged

, который отслеживает текущие и предыдущие состояния свитка. Если вы подниметесь вверх, тогда вы сможете сделать то же самое.

Нечто похожее на следующее бы добиться того, что вы спрашиваете:

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

Вы можете сделать это, сохранив предыдущую первое видимое положение каждый раз, когда она меняется:

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

mmh .. Теперь он появляется и исчезает, когда он хочет :) –

+0

Можете ли вы взглянуть на мое редактирование, пожалуйста? –

+0

@ End.Game Я обновил свой ответ, это было неправильно раньше. Обратите внимание, однако, что это не лучший способ сделать это. – Simas

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

это работает для меня на kitkat

 Смежные вопросы

  • Нет связанных вопросов^_^