我有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
答案 0 :(得分:0)
notifyDataSetChanged()
通知附加的观察者基础数据已更改,反映数据集的任何视图都应自行刷新。
试着看看" onCreate()"更新时再次调用
答案 1 :(得分:0)
FirebaseUI lib为您处理所有这些并简化您的代码。
顺便说一句,您可以使用mAdapter.notifyItemInserted(ChatMessages.size() - 1);
或mMessageAdapter.notifyItemRangeInserted(ChatMessages.size() - 1, ChatMessages.size() - 1 + numberOfItemsBeingInserted);
并进行其他必要的更改,以便使其生效,而不是使用mMessageAdapter.notifyDataSetChanged();