2

我正在构建一个聊天室应用程序,其中每 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(),因为正如文档注释,在触摸模式下调用 setSelection 实际上并没有选择项目,只是滚动到它。

4

2 回答 2

6

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

于 2009-10-10T23:33:56.613 回答
5

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

于 2012-09-06T12:19:28.510 回答