0

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

我用了

ListView.setSelection(totalItemCount - 9);

显示新添加的 10 项中的第一项。但这里发生的情况是显示实际上转到列表视图的第一项,但它再次自动滚动到新添加的 10 项的第一项。所以,这里的用户体验会很糟糕......我希望它改变,这样它就不会进入列表视图的顶部。希望我解释清楚,请帮助,谢谢

4

3 回答 3

1

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

int firstVisiblePosition = listView.getFirstVisiblePosition();

编辑 试试这个:

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

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

listView.setSelectionFromTop(firstVisiblePosition, distFromTop);
于 2012-05-16T05:54:42.203 回答
0

您可能想要覆盖列表视图的 onSizeChanged(...) 方法。

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

尝试这样的事情:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
setSelection(getCount()-9);
于 2012-05-16T05:51:16.340 回答
0

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

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

于 2012-05-16T05:54:04.013 回答