检测ListView(或ScrollView)中的滚动位置

时间:2009-10-10 23:17:19

标签: android listview android-listview

我正在构建一个聊天室应用程序,每隔X秒轮询一次新事件。每次发生这种情况时,此代码都会使用新数据更新RoomAdapter(ArrayAdapter的自定义子类)并将其滚动到底部:

RoomAdapter adapter = (RoomAdapter) getListAdapter();
for (int i=0; i<newEvents.size(); i++)
 adapter.add(newEvents.get(i));
getListView().setSelection(events.size()-1);

这很好,但是如果用户向上滚动以查看房间的历史记录,那么当轮询发生时,它会将她跳到底部。我想要做的是,如果用户已经在列表的底部,那么在对新事件进行轮询之后,它就会停留在那里。如果用户有意向上滚动,我希望用户不要被打扰。

如何检测我何时已滚动到ListView的底部?

注意:我不能做getListView()。getSelectedItemPosition(),因为as the docs note,在触摸模式下调用setSelection实际上并没有选择项目,只是滚动到它。

2 个答案:

答案 0 :(得分:6)

我没试过这个,但getLastVisiblePosition()==getCount()-1怎么样? (ListView上的方法)

答案 1 :(得分:5)

但这不是一个正确的方法。
使用
android:transcriptMode
- 内容更改时列表的行为
- “禁用”,不滚动
- “正常”,如果最后一项可见,则滚动到底部 - “alwaysScroll”,始终滚动到底部
android:stackFromBottom
- 按相反顺序堆叠项目
- 从适配器的最后一项开始 •对聊天有用 - 消息,谈话,IRC等。