2016-05-23 18 views
0

最後一次查看的位置我完成了頂部分頁像安卓:保持的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

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

    那麼你可以通過設置位置,你的列表視圖

  1. 聲明Parcelable state = null;作爲全球目前類
  2. onScroll裏面(在調用列表視圖數據方法之前)stor Ë像

    state = listView.onSaveInstanceState();

  3. 位置列表視圖數據附加到適配器後保持像

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

0

你可以得到的ListView可見位置:

YOURLISTVIEW.setSelection(position); 
+0

它不工作的位置。如果我使用這個,所有頁面在我滾動到頂部位置時加載 – Bahu