2015-08-06 3 views
0

Мое требование прост. В моем приложении есть список с сообщениями чата и значок стрелки в верхней части экрана. Новые элементы будут добавлены динамически и я хочу показать этот значок стрелки при поступлении нового сообщения, проверяя некоторые условия,Как я могу проверить, что последний элемент списка виден или нет??

1. Arrow will be shown if listview is not at bottom (ie last item is not visible). 
2. Arrow will be dismissed when user scrolls listview to bottom. 
3. Arrow will not be showed if listview is at bottom. 

Я использовал логическое значение для проверки статуса позиции в listvew, при поступлении нового сообщения я я проверка,

    if(isAtBottom){ 
        // Adding to list 
        mChatMessages.add(mNewMessage); 
        mAdapter.setListing(mChatMessages); 
        scrollListViewToBottom(); 
        }else{ 
        mChatMessages.add(mNewMessage); 
        mAdapter.setListing(mChatMessages); 
        startArrowIndicator(); 
        } 

И когда пользователь прокручивает ListView используется следующий код,

@Override 
     public void onScroll(AbsListView absListView, final int firstVisibleItem, 
          final int visibleItemCount, final int totalItemCount) { 
      final int lastItem = firstVisibleItem + visibleItemCount; 
      if(lastItem == totalItemCount) { 
       stopArrowIndicator(); 
       isAtBottom = true; 
      }else{ 
       isAtBottom = false; 
      } 
     } 

Но этот код не работающий .... Любая идея ..?

+0

Проверить это один http://stackoverflow.com/a/13134100/1384010 –

ответ

0

Индикатор, показывающий, что данных недостаточно: сначала проверьте, не отобразилось ли последнее видимое положение по длине списка перед его отображением.

ListView lv = getListView(); 
if(lv.getCount() != lv.getLastVisiblePosition() + 1) 
    // show the indicator 

Проверить новый элемент видимым или нет: Если новый элемент добавляется к началу проверки, если это меньше, чем в первом видимом положении

int itemPos = 0; 
if(itemPos < lv.getFirstVisiblePosition()) 
    // show the indicator 

в случае его добавляют к нижней проверки, если это больше, чем последняя видимая позиция.

int itemPos = lv.getCount(); 
if(itemPos > lv.getLastVisiblePosition()) 
    // show the indicator 
+0

это не работает .. я попытался это один .. но несколько раз, когда я был середина ListView, то я добавил новый элемент в список, он будет прокручиваться донизу, не показывая индикатор стрелки. – Nidheesh