确保您的适配器调用notifyDataSetChanged()



我需要帮助!,请当我删除列表中的第一个项目时,在删除所有项目后,它将关闭应用程序。

我详细介绍了控制台上的内容:

适配器的内容已更改,但ListView未收到通知。确保适配器的内容不是从后台线程修改的,而是仅从UI线程修改的。确保适配器在其内容更改时调用notifyDataSetChanged((。

这是最后一个代码onCreate():

private void listarDatos(){
databaseReference.child("example").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
listDatos.clear();
if(dataSnapshot.exists()){
for(DataSnapshot objSnapyshot: dataSnapshot.getChildren()){
Datos p = objSnapyshot.getValue(Datos.class);
listDatos.add(p);
arrayAdapterDatos = new ArrayAdapter<Datos>(MainActivity.this, android.R.layout.simple_list_item_1, listDatos);
listV_personas.setAdapter(arrayAdapterDatos);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void iniciarFirebase(){
FirebaseApp.initializeApp(this);
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference= firebaseDatabase.getReference();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.icon_delete) {
Datos ip = new Datos();
ip.setUid(DatosSelected.getUid());
databaseReference.child("example").child(ip.getUid()).removeValue();
LimpiarCajas();
}
return true;
}
private void LimpiarCajas() {
nombreP.setText("");
distritoP.setText("");
direccionP.setText("");
referenciaP.setText("");
telefonoP.setText("");
productoP.setText("");
pagoP.setText("");
}
//....and class for the 'getter and setter'
public class Datos {
private String Uid;
private String Anombre;
private String Bdistrito;
private String Cdireccion;
private String Dreferencia;
private String Etelefono;
public Datos(){
}
public String getUid() {
return Uid;
}
public void setUid(String uid) {
Uid = uid;
}
public String getAnombre() {
return Anombre;
}
public void setAnombre(String anombre) {
Anombre = anombre;
}
public String getBdistrito() {
return Bdistrito;
}
public void setBdistrito(String bdistrito) {
Bdistrito = bdistrito;
}
public String getCdireccion() {
return Cdireccion;
}
public void setCdireccion(String cdireccion) {
Cdireccion = cdireccion;
}
public String getDreferencia() {
return Dreferencia;
}
public void setDreferencia(String dreferencia) {
Dreferencia = dreferencia;
}
public String getEtelefono() {
return Etelefono;
}
public void setEtelefono(String etelefono) {
Etelefono = etelefono;
}

@Override
public String toString(){
return Anombre;
}
}

您可以在调用LimpiarCajas();方法后尝试调用arrayAdapterDatos.notifyDataSetChanged();rigth

如果不起作用,请尝试在listV_personas.setAdapter(arrayAdapterDatos);之后立即呼叫arrayAdapterDatos.notifyDataSetChanged();

最新更新