我正在开发带有聊天功能的应用程序,当用户发布新消息并且在列表底部时,我希望我的ListView
能够自动向下滚动。我正在使用以下ListView
:
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp"
android:stackFromBottom="true"
android:paddingBottom="9dp"
android:clipToPadding="false"/>
这是一种在需要时强制滚动的方法:
private void scrollListViewToBottom() {
listView.setSelection(adapter.getCount() - 1);
}
但是当聊天内容包含高度大于屏幕高度的元素(大文本或图像)时,它会滚动到其顶部。我需要我的 ListView
滚动到底部,而不是最后一个元素。
我尝试使用 listView.scrollTo(0, listView.getBottom())
方法,但结果非常奇怪 - 有时它会滚动到最后一条消息 + 半屏间隙,有时会滚动到我看不到任何消息的地方。
有什么想法吗?谢谢。
notifyDataSetChanged()
只在一些常见的子类中实现,而在 ListAdapter 或其他纯实现中不可用。 - bukkojotnotifyDataSetChanged()
来完成其他任务,我不需要每次执行它时都滚动。感谢您对1像素大小元素的帮助,这应该可以解决问题。但是听起来并不是100%好的解决方案。难道没有不添加额外元素就能实现这个技巧的方法吗? - Artem Samokhin