我正在开发一个聊天应用程序,我需要在从服务器加载更多数据后恢复listview项目位置。我使用反向listview(android:stackFromBottom =“true”android:transcriptMode =“normal”)与标题视图并使用下面的代码来保存位置
firstVisibleItem = mListView.getFirstVisiblePosition();
oldCount = mListAdapter.getCount();
View view = mListView.getChildAt(0);
position = (view == null ? 0 : view.getBottom()- mListView.getPaddingBottom());
和以下代码重新存储位置
mListView.setSelectionFromTop(firstVisibleItem + mListAdapter.getCount() - oldCount+1, position);
恢复的位置不完全相同,向上移动一个项目。如何在这里考虑标题视图高度???
我试过
View view = mListView.getChildAt(1);
View view = mListView.getChildAt(-1);
但同样的问题
答案 0 :(得分:0)
我猜你需要这样做,因为当你拥有新数据时,即使新数据只是旧数据,也可以通过调用setAdapter
替换旧适配器。 +一些新事物。
如果您没有更换适配器,只是更改它所拥有的数据(例如,只需添加项目),ListView
默认情况下就会按照您的意愿运行。要完成此操作,请确保您有办法更新适配器中的数据,并在完成后调用notifyDataSetChanged
。在UI线程上执行这些操作以避免与ListView
同步问题。