Android ListView 滚动到底部

标签 android listview scroll

我正在开发带有聊天功能的应用程序,我希望我的 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()) 方法但结果很奇怪 - 它有时滚动到最后一条消息 + 半屏间隙,有时滚动到我看不到任何消息的地方。

有什么想法吗?谢谢。

最佳答案

您可以使用 android:stackFromBottom="true" 从下到上填充列表,并添加 android:transcriptMode="alwaysScroll" 自动滚动 ListView 。

您只需调用 notifyDataSetChanged(),您的列表就会自动滚动。

为了在大块的情况下处理滚动到绝对底部,您可以在每个列表项下方添加高度为 1 像素的列表项,这样无论您的项目高度是多少,您都将始终被定向到列表末尾。

关于Android ListView 滚动到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290105/

相关文章:

javascript - 网站滚动问题

java - MediaCodec 解码时 AV 同步

android - 仅使用 AChartEngine 隐藏 y 轴

c# - 将 ListView 拆分为多列

wpf - 如何在 XAML 中添加 ListView CornerRadius

iphone - iPhone Simulator 3.0 是否打破了双指 div 滚动?

jquery - css scroll-linked positioning effect warning on change background 颜色

java - Android SQLite 表不存在

Android:按住/单击按钮时如何更改/删除按钮行程

java - SimpleCursorAdapter 删除值