ListView在更新后滚动到顶部

时间:2017-09-15 13:06:40

标签: android listview scroll autoscroll

我有mChildEventListener查询来自Firebase Database的第一个 n 项和另一个mChildEventListener2(当用户向上滚动并点击{时触发{1}}按钮)查询下一个 n 项并将其添加到Load More

当用户点击ChatMessagesList按钮时:Load More已更新,并且ChatMessagesList被调用。 notifyDataSetChanged已更新,但每次都会向下滚动到按钮。我解释了这种行为,因为xml属性:mMessageListView

当我删除android:transcriptMode="alwaysScroll"并且用户按下transcriptMode="alwaysScroll"按钮时,Load More会将此时滚动到顶部。

这些行为都不是必需的。我希望当用户按下按钮时,mMessageListView将保持其“滚动位置”。 (显而易见的原因)

我尝试从新主题调用mMessageListView。没有结果。

我尝试使用notifyDataSetChanged或使用listView.setSelectionFromTop(lastViewedPosition, topOffset);,但没有人能够获得我想要的流畅体验。

list.smoothScrollToPosition();更新后,如何保持滚动位置?

这是代码:

mMessageListView

2 个答案:

答案 0 :(得分:0)

notifyDataSetChanged()

通知附加的观察者基础数据已更改,反映数据集的任何视图都应自行刷新。

试着看看" onCreate()"更新时再次调用

答案 1 :(得分:0)

FirebaseUI lib为您处理所有这些并简化您的代码。 顺便说一句,您可以使用mAdapter.notifyItemInserted(ChatMessages.size() - 1);mMessageAdapter.notifyItemRangeInserted(ChatMessages.size() - 1, ChatMessages.size() - 1 + numberOfItemsBeingInserted);并进行其他必要的更改,以便使其生效,而不是使用mMessageAdapter.notifyDataSetChanged();