gpt4 book ai didi

java - 每当我从 Firebase 加载数据时,RecyclerView 都会滚动到底部

转载 作者:行者123 更新时间:2023-11-30 12:04:08 25 4
gpt4 key购买 nike

基本上,每当我将数据加载到我的 recyclerView 时,它会自动滚动到 recyclerView 的底部

这里是我的函数的样子:

mMessagesDBRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

final String key = getIntent().getStringExtra("key");
final String currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
if (dataSnapshot.child(key).child(currentUid).exists() && !dataSnapshot.child(currentUid).child(key).exists()) {

mMessagesDBRef.child(key).child(currentUid).limitToLast(TOTAL_ITEMS_TO_LOAD* mCurrentPage).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mMessagesList.clear();
for (DataSnapshot snap : dataSnapshot.getChildren()) {
ChatMessage chatMessage = snap.getValue(ChatMessage.class);
mMessagesList.add(chatMessage);
populateMessagesRecyclerView();


}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

private void populateMessagesRecyclerView() {

adapter = new messageAdapter(mMessagesList, this);
mChatsRecyclerView.setAdapter(adapter);



}

这是我的一些 xml 文件:

<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refreshLayout"
android:layout_below="@id/imageView11"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@id/imageView14">

<android.support.v7.widget.RecyclerView
android:background="#f9f9f9"
android:id="@+id/messagesRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</android.support.v4.widget.SwipeRefreshLayout>

有什么方法可以停用自动滚动。还有谢谢

最佳答案

在你的 for 循环中,将你的 populateMessagesRecyclerView() 移出它

...
for (DataSnapshot snap : dataSnapshot.getChildren()) {
ChatMessage chatMessage = snap.getValue(ChatMessage.class);
mMessagesList.add(chatMessage);

}

populateMessagesRecyclerView();

}
...

如果您让该方法进入您的 for 循环,它将创建适配器的 x 个实例,并将完成多次工作,将其保留在外面,您确定您只会使用列表数据实例化一次适配器。

如果您来自 Firebase 的数据以错误的顺序传入(假设旧数据先引入而不是新数据)

要解决此问题,在您的 populateMessagesRecyclerView(); 中,您可以反转 RecyclerView

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
mChatsRecyclerView.setLayoutManager(linearLayoutManager);

关于java - 每当我从 Firebase 加载数据时,RecyclerView 都会滚动到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com