我希望在 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"/>
这是我的数据库
最佳答案
您必须将子值事件监听器添加到 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/