android - RecyclerView 没有显示我预期的输出

标签 android firebase-realtime-database android-recyclerview

我希望在 recyclerview 列表中打印出来自 firebase 的数据。 循环是正确的,但它没有替换我的数据。

这是来自 track_record 代码。

 private void readData(){

    reference = FirebaseDatabase.getInstance().getReference("FireAlarm");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            dataList.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                    Data data = snapshot.getValue(Data.class);
                    dataList.add(data);
            }
            recordAdapter = new RecordAdapter(track_record.this,dataList);
            recyclerView.setAdapter(recordAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

这是我的适配器

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_data,parent,false);
    return new RecordAdapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Data data = dataList.get(position);
    holder.outputData.setText(data.getAlarm());
}

@Override
public int getItemCount() {
    return dataList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    TextView outputData;
    public ViewHolder(View itemView){
        super(itemView);

        outputData = itemView.findViewById(R.id.dataFetch);
    }
}

这是来自xml的数据应该被替换

 <TextView
    android:id="@+id/dataFetch"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="data"
    android:textSize="20dp"
    android:textAlignment="center"
    android:background="#F5B6B6"
    android:textColor="#000000"/>

这是我的数据库

my database look like this

这是当前输出 this is the current output

最佳答案

您必须将子值事件监听器添加到 FireAlarm,监听器将在附加到 DatabaseReference 对象时立即触发(在您的代码中该对象是 reference ) 通过调用 onChildAdded() 方法并在每次添加、删除、更改、...... 您的 readData 应该重写如下:

reference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                Data data = (Data) dataSnapshot.getValue(Data.class);
                dataList.add(data);
                //then notify data changed 
                recordAdapter.notifyDataSetChange();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

               Data data = (Data) dataSnapshot.getValue(Data.class);
                //then find position of `data` in datalist to change some information of the item at position.
                //then notify data changed 
                recordAdapter.notifyDataSetChange(); 
            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                Data data = (Data) dataSnapshot.getValue(Data.class);
                //then find data in datalist to remove, after removed, notify data set changed
                recordAdapter.notifyDataSetChange();
            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

关于android - RecyclerView 没有显示我预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55508327/

相关文章:

android - toolbar.setNavigationOnClickListener 不工作

android - 如何从 Android 应用程序读取 OpenOffice 文档电子表格?

ios - 将复杂结构保存到 firebase

javascript - Firebase 如何更新多个 child ?

java - RecyclerView : itemView. setVisibility(View.GONE) 隐藏itemView下面的所有item

java - Android WebView onPageFinished BUG

android - 为什么我的文本在使用 SpannableStringBuilder 时没有显示样式?

ios - Swift - 带有 Swift 的 JSQMessagesViewController

java - 动态更改 RecyclerView 单击中的工具栏项目可见性(无需 LongClick)

android - 在嵌套回收器 View 中加载数据