Update RecyclerView

1

I have an ArrayList which provides the data to the RecyclerView, the idea is that when you click on an item this is deleted, and implement the onClick method and I also have the line of code to delete a data from the arrayList, but not I know how to update it and see the data except the one that was deleted.

This is the main class

public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;
ArrayList<Personas> lista;
TextView texto;
Adaptador adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lista = new ArrayList<>();

    texto = (TextView)findViewById(R.id.Nombre);
    recyclerView = (RecyclerView)findViewById(R.id.Recycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    llenarDtos();

    adapter= new Adaptador(lista);

    recyclerView.setAdapter(adapter);




    adapter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            lista.remove(recyclerView.getChildAdapterPosition(v));

            Toast.makeText(getApplicationContext(),lista.get(recyclerView.getChildAdapterPosition(v)).getNombre(),Toast.LENGTH_SHORT).show();
        }
    });
  }

private void llenarDtos() {

    lista.add(new Personas("Pablo","5",R.drawable.fuego));
    lista.add(new Personas("Sebastian","7",R.drawable.manzana));
    lista.add(new Personas("Juan","9",R.drawable.suplemento));
    lista.add(new Personas("Camila","4",R.drawable.manzana));
    lista.add(new Personas("Tatiana","2",R.drawable.fuego));
}

  }

This is the Adapter

public class Adaptador extends RecyclerView.Adapter<Adaptador.ViewHolderPersonas> implements View.OnClickListener {

ArrayList<Personas> lista;
View.OnClickListener listener;


public Adaptador(ArrayList<Personas> lista) {
    this.lista = lista;
}

@Override
public ViewHolderPersonas onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);
    view.setOnClickListener(this);

    return new ViewHolderPersonas(view);
}

@Override
public void onBindViewHolder(ViewHolderPersonas holder, int position) {

    holder.nombre.setText(lista.get(position).getNombre());
    holder.info.setText(lista.get(position).getInfo());
    holder.foto.setImageResource(lista.get(position).getFoto());

}

@Override
public int getItemCount() {
    return lista.size();
}

public void setOnClickListener(View.OnClickListener listener)
{

    this.listener = listener;
}
@Override
public void onClick(View v) {
    if(listener!=null)
    {
        listener.onClick(v);
    }

}


public class ViewHolderPersonas extends RecyclerView.ViewHolder {

    TextView nombre;
    TextView info;
    ImageView foto;

    public ViewHolderPersonas(View itemView) {
        super(itemView);

        nombre= (TextView)itemView.findViewById(R.id.Nombre);
        info= (TextView)itemView.findViewById(R.id.Informacion);
        foto= (ImageView) itemView.findViewById(R.id.foto);

    }
}
}
    
asked by Sergio 16.12.2017 в 03:29
source

1 answer

1

You should only notify the adapter that you have just deleted an item:

adapter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = recyclerView.getChildAdapterPosition(v);
            lista.remove(position);
            adapter.notifyItemRemoved(position); // Notificar al adaptador
            Toast.makeText(getApplicationContext(),lista.get(recyclerView.getChildAdapterPosition(v)).getNombre(),Toast.LENGTH_SHORT).show();
        }
    });
    
answered by 16.12.2017 / 08:23
source