Android 当滚动以动态获取新项目时,如何在列表视图中显示最后一个项目?

Android 当滚动以动态获取新项目时,如何在列表视图中显示最后一个项目?,android,android-listview,Android,Android Listview,我的应用程序中有一个列表视图,最初显示10个项目,当我滚动到底部时,每次动态添加10个项目。我的问题是,当我滚动到底部时,显示会转到列表中的第一项(不是新添加的10项),因此我需要一直向下滚动 我曾经 ListView.setSelection(totalItemCount - 9); 显示新添加的10项中的第一项。但这里发生的是,显示实际上转到listview的第一项,但它再次自动滚动到新添加的10项中的第一项。所以,ux在这里会很糟糕……我希望它能改变,这样它就不会出现在列表视图的顶部。希

我的应用程序中有一个列表视图,最初显示10个项目,当我滚动到底部时,每次动态添加10个项目。我的问题是,当我滚动到底部时,显示会转到列表中的第一项(不是新添加的10项),因此我需要一直向下滚动

我曾经

ListView.setSelection(totalItemCount - 9);

显示新添加的10项中的第一项。但这里发生的是,显示实际上转到listview的第一项,但它再次自动滚动到新添加的10项中的第一项。所以,ux在这里会很糟糕……我希望它能改变,这样它就不会出现在列表视图的顶部。希望我解释清楚,请帮忙,谢谢你,你可能想覆盖listview的onSizeChanged(…)方法

我想这就是它导航到顶端的原因

试着这样做:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
setSelection(getCount()-9);

我不认为手动设置选项是一种良好的用户体验(因为他们可能会查看列表中的最上面的项目)


动态检索要添加到列表中的新项目集后,只需调用addAll()方法,然后通知适配器需要使用notifyDatasetChanged()刷新内容。ListView在刷新时记住当前位置方面很聪明

向下滚动并开始获取新数据时,应使用以下方法将最后可见位置存储在某些变量中:

int firstVisiblePosition = listView.getFirstVisiblePosition();
编辑 试试这个:

View view = listView.getChildAt(0);
int distFromTop = (view == null) ? 0 : view.getTop();
然后,在完成加载数据后,应使用以下方法设置此位置:

listView.setSelectionFromTop(firstVisiblePosition, distFromTop);

是的,我正在使用addAll()和noifyDataSetChanged()是的,这就是我现在的实现方式……这里发生的事情是,它首先进入顶部,然后进入setSelection(firstVisiblePosition)