Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使Listview在正常转录模式下平稳向下滚动?_Android_Android Listview_Android Styles - Fatal编程技术网

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());
    });
}