我有一个人列表(piloto),每个人都有一个带有一些音频的集合。 我把这些音频放在发送适配器的列表中,并在recyclerview中显示。
我尝试使用不同的代码,但只有我才能使用,但问题出在这里:
为什么我第一次单击某个项目时它显示的音频列表为空?然后返回,下次我单击该项目时,它将正确显示列表。 当我使用真正的smarthphone运行该应用程序时,当我第一次使用模拟器运行它时,它会正确显示列表。
public class PilotoDetalle extends AppCompatActivity {
RecyclerView rv;
List<Audio> audios;
AdapterAudios adapter;
private Audio audio;
private Piloto piloto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_piloto_detalle);
rv = findViewById(R.id.recyclerAudio);
rv.setLayoutManager(new LinearLayoutManager(this));
audios = new ArrayList<>();
adapter = new AdapterAudios(audios);
rv.setAdapter(adapter);
final FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("pilotos").document(piloto.getId()).collection("audios")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot snapshots,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w("TAG", "listen:error", e);
return;
}
for (DocumentChange dc : snapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
Log.d("TAG", "New Msg: " + dc.getDocument().toObject(Message.class));
//audios.removeAll(audios);
Audio audio = dc.getDocument().toObject(Audio.class);
audios.add(audio);
break;
case MODIFIED:
Log.d("TAG", "Modified Msg: " + dc.getDocument().toObject(Message.class));
break;
case REMOVED:
Log.d("TAG", "Removed Msg: " + dc.getDocument().toObject(Message.class));
break;
}
}
}
});
}
答案 0 :(得分:0)
发生这种情况是因为您第一次设置适配器时,列表为空。
audios = new ArrayList<>();
adapter = new AdapterAudios(audios);
rv.setAdapter(adapter);
您应该在audios
内填充EventListener
并在那里设置/交换适配器,以便在刷新时获取数据。