2009-10-10 74 views
2

我正在构建一个聊天室应用程序,每隔X秒轮询新事件。每次出现这种情况时,该代码更新RoomAdapter(ArrayAdapter的自定义子类)与新的数据和滚动它的底部:检测ListView(或ScrollView)内的滚动位置

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并不真正选择该项目,只是滚动到它。

回答

6

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

+0

热潮!就是这样。我错过了这个方法。谢谢! – Konklone 2009-10-12 01:07:45

5

但这不是一个正确的方法。
使用
android:transcriptMode
- 列表的行为,当内容发生变化
- “禁用”,不滚动
- “正常”,滚动到底部,如果最后一个项目是可见的
- “alwaysScroll ”,始终滚动到底部
android:stackFromBottom
- 以相反的顺序
堆栈的项目 - 从适配器
•有用的聊天
与最后一个项目启动 - 混乱老化,谈话,IRC等

+0

当时,CommonsWare的答案仍然是正确的方式,我不相信transcriptMode还在。所以我不会拿走他接受的答案。但谢谢你澄清! – Konklone 2012-10-16 15:10:47

相关问题