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

时间:2012-05-16 05:42:11

标签: android android-listview

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

我用过

ListView.setSelection(totalItemCount - 9);

显示新添加的10个项目的第1项。但这里发生的事情是显示实际上转到列表视图的第一项,但它再次自动滚动到新添加的10项的第一项。所以,ux在这里会很糟糕....我希望它能够改变,以便它不会出现在列表视图的顶部。希望我能清楚地解释清楚,请帮助,谢谢你

3 个答案:

答案 0 :(得分:1)

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

int firstVisiblePosition = listView.getFirstVisiblePosition();

修改 试试这个:

View view = listView.getChildAt(0);
int distFromTop = (view == null) ? 0 : view.getTop();

然后在完成加载数据后,您应该使用以下方式设置此位置:

listView.setSelectionFromTop(firstVisiblePosition, distFromTop);

答案 1 :(得分:0)

您可能想要覆盖listview的onSizeChanged(...)方法。

我猜那是导航到它的顶部。

尝试这样的事情:

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

答案 2 :(得分:0)

我不认为手动设置选择是一种很好的用户体验(因为他们可以查看列表中的顶级项目)。

一旦动态检索了要添加到列表中的新项目集,您只需调用addAll()方法,然后通过notifyDatasetChanged()通知适配器需要刷新内容。 Listviews非常聪明地记住刷新时的当前位置。