Android 如何使Listview在正常转录模式下平稳向下滚动?
我有一个用于聊天的Android 如何使Listview在正常转录模式下平稳向下滚动?,android,android-listview,android-styles,Android,Android Listview,Android Styles,我有一个用于聊天的列表视图。 当新消息出现时,我需要自动向下滚动该列表。我是用电脑做的 chatView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_NORMAL); 一切都像一个魔咒,但我想让列表平滑地向下滚动,就像使用smoothScrollBy()方法一样。现在,当调用notifydatasethanger()时,它就跳到了末尾 我怎样才能做到这一点? 以下是我的ListView xml项目,以防万一: <ListView
列表视图
。
当新消息出现时,我需要自动向下滚动该列表。我是用电脑做的
chatView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_NORMAL);
一切都像一个魔咒,但我想让列表平滑地向下滚动,就像使用smoothScrollBy()
方法一样。现在,当调用notifydatasethanger()
时,它就跳到了末尾
我怎样才能做到这一点?
以下是我的ListView xml项目,以防万一:
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stackFromBottom="true"
android:clipToPadding="false"
android:divider="@null" android:dividerHeight="4dp"
android:id="@+id/chat"
android:layout_weight="1"
android:background="@color/background_green"
android:paddingBottom="@dimen/between_elements_spacing"/>
您是否尝试过使用此功能
list.smoothScrollToPosition(postitionOfRow);
如果使用正确,notifyData不应在任何地方滚动。你能把代码贴在哪里吗?我觉得转录模式没有“动画”选项有点令人沮丧。实现这一点的方法是禁用转录模式,并在调用notifyDataSetChanged()后: 由于禁用了转录模式,现在需要创建一个
determinateFlistViewShouldAutoScroll()
函数来确定是否执行任何操作。使用chatListView.getLastVisiblePosition()
确定列表视图是否滚动到足以自动显示新项目的程度。对于类似于转录模式“正常”的内容,您只需检查最后可见的项目位置是否在项目总数的1或2范围内
这不会让你控制动画,列表视图会做任何它想做的事情。如果需要更多控制,可以运行自定义动画,每个勾号调用
listView.setSelectionFromTop(lastItemPosition,listviewHeight-distanceY)代码>其中listviewHeight是整个listview的高度,distanceY是0和新视图测量高度之间的动画值。错误。当listview的转录模式设置为“AbsListView.transcript\u mode\u NORMAL”时,它将自动滚动。来自Android开发者:“转录模式”正常:当收到数据集更改通知时,列表将自动滚动到底部,并且仅当最后一项已经在屏幕上可见时。”()和否,如果我在每次数据集更改通知后都按您所说的做-由于转录模式,它现在仍然平滑滚动。*我的意思是,它仍然不平滑滚动。平滑滚动到位置仅在listview尚未移动到新项目时有用,它将在转录模式下正常滚动。
if (determineIfListViewShouldAutoScroll()) {
mainThreadHandler.post(() -> {
listView.setSelection(adapter.getCount() - 2);
});
mainThreadHandler.post(() -> {
listView.smoothScrollToPosition(adapter.getCount());
});
}