2016-05-23 4 views
0

я закончил верхнюю пагинацию какAndroid: Поддержание последней просмотренной позиции в ListView

messagesContainer.setOnScrollListener(new OnScrollListener() { 

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

       if (visibleItemCount == totalItemCount){ 
        java.lang.System.out.println("too little items to use a ScrollView!"); 
       } else { 
        if ((firstVisibleItem + visibleItemCount) == totalItemCount) { 
         //Log.e("bottomPosition", "bottomPosition"); 

        }else if (firstVisibleItem == 0) { 
         Log.e("topPosition", "topPosition"); 



          index = messagesContainer.getLastVisiblePosition(); 
          View v = messagesContainer.getChildAt(messagesContainer.getHeaderViewsCount()); 
          top = (v == null) ? 0 : v.getTop(); 



         if(rechedTopPosition != null){ 

          rechedTopPosition = null; 

           Log.e("pageNoForVolUrl", pageNoForVolUrl+""); 

           getPrevChatVolley(); 

         } 


        } 
       } 

      } 

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

       if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
        //Log.e("a", "scrolling stopped..."); 
       } 


      } 
     }); 

for(int i = 0; i < rowsArray.length() ; i++){ 

    JSONObject singleObj = rowsArray.getJSONObject(i); 
    JSONObject valueObj = singleObj.getJSONObject("value"); 

    String commentId = valueObj.getString("_id"); 
    String textMessage = valueObj.getString("body"); 





    ChatMessageItems chatMessage = new ChatMessageItems(); 
    chatMessage.setId(122);//dummy 
    chatMessage.setMessageId(commentId); 
    chatMessage.setMessage(textMessage); 

    if (fromUserId.equals("384")) { 
     chatMessage.setMe(false); // False = right side, True = left side 
    } else { 
     chatMessage.setMe(true); 
    } 

    itemsAdapter.insert(chatMessage, 0); 

} 

    rechedTopPosition = "fulFilled"; 

    messagesContainer.setSelectionFromTop(index, top); 

<ListView 
     android:id="@+id/messagesContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:divider="@null" 
     android:stackFromBottom="true" 
     android:listSelector="@android:color/transparent" />  

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

Для экс:

Моего первоначальный ListView, как

---- 
15 
16 
17 
18 
19 
20 

Когда я прокручивать до 15 (вверху) положения он загружает все пункты в верхней части, но это не сохранение последней просмотренных 15 позиции элемента. Он показывает некоторый другой элемент после обновления listView. Поэтому я хочу сохранить последнюю просматриваемую позицию после обновления элементов в верхней позиции. Пожалуйста, дайте мне любую идею ...... Спасибо

ответ

0
  1. Объявление Parcelable state = null; как глобально от настоящего класса
  2. Внутри onScroll (Перед вызовом метода просмотра списка) е положение, как

    state = listView.onSaveInstanceState();

  3. После добавления данных просмотра списка в адаптере поддерживать позицию как

    if(state != null){ listView.onRestoreInstanceState(state); }

0

Вы можете получить видимое положение ListView по:

int position; 

YOURLISTVIEW.setOnScrollListener(new OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      // TODO Auto-generated method stub 

     } 

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

     } 
    }); 

, то вы можете установить позицию вашего ListView по:

YOURLISTVIEW.setSelection(position); 
+0

Это не работает. Если я использую это, все страницы загружаются в то время, когда я просматриваю верхнюю позицию – Bahu

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