0
我正在开发聊天应用,我希望我的ListView
在用户发布新消息时以及当用户位于列表底部并收到新消息时滚动到底部。我用这ListView
:Android 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或其他纯粹的实现中不可用。 – bukkojot
我使用'notifyDataSetChanged()'作为另一个用途,每次执行它时都不需要滚动。感谢1像素大小的元素的帮助,这应该工作。但这听起来并不是100%的好解决方案。如果不添加一些额外的元素,是否真的没有办法做到这一点? –
有时候黑客是唯一的方法:) –