【问题标题】:Make sure your adapter calls notifyDataSetChanged()确保您的适配器调用 notifyDataSetChanged()
【发布时间】:2020-11-07 13:25:22
【问题描述】:

我需要帮助!请。当我删除列表中的第一项时,全部删除后,它会关闭应用程序。

我详细说明了控制台上的内容:

适配器的内容发生了变化,但 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;
    }
}

【问题讨论】:

  • 发布堆栈跟踪

标签: android android-listview


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多