【问题标题】:RecyclerView didn't show my expected outputRecyclerView 没有显示我的预期输出
【发布时间】:2019-08-25 18:14:36
【问题描述】:

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

这是来自 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"/>

这是我的数据库

这是当前输出

【问题讨论】:

  • 使用标签android。请不要使用 IDE 标签 (android-studio) 标记问题,仅仅因为您使用该 IDE:这些标签仅应在您对 IDE 本身有疑问时使用,而不是您编写(或想要编写)的任何代码它。请参阅 when is it appropriate to remove an IDE tagHow do I avoid misusing tags?tagging guide。另外,请阅读How to Ask
  • 发布您的适配器的完整代码。
  • 添加数据类代码
  • FireAlarm 是你的根节点吗?请回复@AlexMamo
  • 是的 FireAlarm 是我的根节点 @AlexMamo

标签: android firebase-realtime-database android-recyclerview


【解决方案1】:

您应该使用addChildEventListener 而不是addValueEventListener,并在onChildAdded 中编写代码。

你可以从documentation找到解释:

在使用列表时,您的应用程序应该监听孩子 事件而不是用于单个对象的值事件。

【讨论】:

    【解决方案2】:

    您必须将子值事件侦听器添加到FireAlarm,只要通过调用onChildAdded() 方法将其附加到DatabaseReference 对象(在您的代码中对象为reference),就会触发侦听器并触发每个孩子中的时间数据添加,删除,更改,...... 您的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) {
    
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多