【问题标题】:Android: Maintain the last viewed position in ListViewAndroid:在ListView中保持上次查看的位置
【发布时间】:2016-09-20 02:11:41
【问题描述】:

我完成了顶部分页喜欢

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 后显示其他项目。所以,我想在更新顶部位置的项目后保持上次查看的位置。请给我任何想法......谢谢你

【问题讨论】:

    标签: android listview pagination listviewitem


    【解决方案1】:

    您可以通过以下方式获取列表视图的可见位置:

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

    然后您可以通过以下方式将位置设置为列表视图:

    YOURLISTVIEW.setSelection(position);
    

    【讨论】:

    • 它不工作。如果我使用它,所有页面都会在我滚动到顶部位置时加载
    【解决方案2】:
    1. 在当前班级全局声明Parcelable state = null;as
    2. onScroll里面(调用列表视图数据方法之前)存储位置like

      state = listView.onSaveInstanceState();

    3. 将列表视图数据附加到适配器后保持位置

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多