Eliminar fila de RecyclerView

De alguna manera he implementado reciclar vista con la ayuda de este post, ahora mi requisito es eliminar una fila en tiempo de ejecución de esta vista de reciclar.

Link – http://treyrobinson.net/blog/android-l-tutorials-part-3-recyclerview-and-cardview/

Por favor, ayúdame.

Gracias.

4 Solutions collect form web for “Eliminar fila de RecyclerView”

Puesto que no sabemos cómo es su adaptador y dado la información en ese acoplamiento usted puede crear un método en el adaptador que quita un objeto:

public void removeItem(int position) { mData.remove(position); notifyItemRemoved(position); } 

Usted puede todo esto de su actividad como:

 ((MyRecyclerAdapter)myRecyclerView.getAdapter()).removeItem(position); 

Yo era capaz de hacerlo funcionar así.

  ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) { //Remove swiped item from list and notify the RecyclerView datalist.remove(viewHolder.getAdapterPosition()); // this line animates what happens after delete adapter.notifyItemRemoved(viewHolder.getAdapterPosition()); Snackbar.make(recyclerView, "delete successful", Snackbar.LENGTH_LONG).show(); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { return false; } }; 

Y establecer el anterior a la vista de reciclador como este.

  ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); itemTouchHelper.attachToRecyclerView(recyclerView); 

Yo estaba intentando lo mismo de los últimos 2 días y finalmente conseguí que funcione.

Mi mayor problema fue ¿Cómo obtener la posición de la vista de clic para que podamos eliminarlo del adaptador?

Y la solución fue use holder.itemView.setTag(model.get(position)); onBindViewHolder para almacenar la posición de la vista y obtener la posición de la vista ViewModel model = (ViewModel) v.getTag(); usando ViewModel model = (ViewModel) v.getTag(); En onClick()

Pasos para eliminar la fila de RecyclerView en tiempo de ejecución:

  1. Crear MainActivity.java

     public class MainActivity extends Activity { private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; private String[] liststring; private TypedArray listImages; MyRecyclerView adapter; List<ViewModel> model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); liststring=getResources().getStringArray(R.array.listString); listImages=getResources().obtainTypedArray(R.array.listImages); recyclerView=(RecyclerView) findViewById(R.id.my_recycler_view); recyclerView.setHasFixedSize(true); layoutManager=new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); adapter=new MyRecyclerView(createMockList(),this); recyclerView.setAdapter(adapter); adapter.setOnItemClickListener(new RecyclerViewItemClickInterface() { @Override public void onItemclick(View v,ViewModel vModel) { // TODO Auto-generated method stub Log.i("inflatedlayout", v.getId()+""); adapter.remove(vModel); } }); } private List<ViewModel> createMockList() { List<ViewModel> items = new ArrayList<ViewModel>(); for (int i = 0; i < 9; i++) { items.add(new ViewModel("Item " + (i + 1),listImages.getResourceId(i, -1))); } return items; } } 
  2. Crear MyRecyclerView.java

    public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerView.MyViewHolder> implements View.OnClickListener { String data[]; TypedArray images; MyRecyclerView mv; Activity act_context; RecyclerViewItemClickInterface listener; List<ViewModel> model;

     public MyRecyclerView(List<ViewModel> model,Activity act_context) { // TODO Auto-generated constructor stub this.model=model; this.act_context=act_context; } public static class MyViewHolder extends ViewHolder{ private ImageView imageView1; private TextView textView1; //private IMyViewHolderClicks listener; public MyViewHolder(View inflatedView) { super(inflatedView); // TODO Auto-generated constructor stub textView1=(TextView) inflatedView.findViewById(R.id.textView1); imageView1=(ImageView) inflatedView.findViewById(R.id.imageView1); } } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub Log.i("getIemViewTypePosition", ""+position); return super.getItemViewType(position); } @Override public int getItemCount() { // TODO Auto-generated method stub return model.size(); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { // TODO Auto-generated method stub holder.itemView.setTag(model.get(position)); holder.imageView1.setImageResource(model.get(position).getImage()); holder.textView1.setText(model.get(position).gettest()); Log.i("onBindViewHolder", "called by layoutmanager"); } @Override public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { // TODO Auto-generated method stub View v=LayoutInflater.from(act_context).inflate(R.layout.row_layout, parent, false); v.setOnClickListener(this); MyRecyclerView.MyViewHolder vh = new MyViewHolder(v); Log.i("onCreateViewHolder", "ViewHolder created"); return vh; } @Override public void onClick(View v) { // TODO Auto-generated method stub if (listener != null) { ViewModel model = (ViewModel) v.getTag(); listener.onItemclick(v,model);} } void setOnItemClickListener(RecyclerViewItemClickInterface listener){ this.listener=listener; } public void remove(ViewModel item) { int position = model.indexOf(item); model.remove(position); notifyItemRemoved(position); } } 
  3. Crear ViewModel.java

public class ViewModel {
String test; int image;
public ViewModel(String test,int image) { // TODO Auto-generated constructor stub this.test=test; this.image=image; }
String gettest(){ return test; }
int getImage(){ return image; }}

interface 4.Create:

 interface RecyclerViewItemClickInterface { void onItemclick(View v,ViewModel viewModel); } 

Si desea eliminar una fila haciendo clic en ella, creo que la forma más limpia de hacerlo es mediante la implementación de los onClicks en el ViewHolder. A continuación, implementar un método de eliminación pública en el adaptador y, a continuación, pasar el adaptador a la ViewHolder a través del método onCreateViewHolder.

Sería algo como esto:

—EJEMPLO—

Adaptador:

 public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<Object> mDataset; // This is the list of items to be shown //Here you would write the rest of your Adapter code public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final View itemView = mInflater.inflate(R.layout.item_recyclerview_round, parent, false); return new RoundViewHolder(itemView, this); } public void removeItem(int position) { mDataSet.remove(position); notifyItemRemoved(position); // Add whatever you want to do when removing an Item } } 

ViewHolder:

 public class MyViewHolder RecyclerView.ViewHolder implements View.OnClickListener { private MyAdapter myAdapter; // Here you would write the rest of your ViewHolder code public MyViewHolder (View itemView, MyAdapter myAdapter){ super(itemView); this.myAdapter = myAdapter; // Here you would write the rest of your constructor } public void onClick(View view) { myAdapter.removeItem(getAdapterPosition()); } 

Esto funciona para mi. No sé si el rendimiento se podría mejorar (probablemente), pero es la forma más simple que encontré.

Espero que ayude.

  • HorizontalGridView / RecyclerLa posición de desplazamiento se restablece una vez que la imagen de Picasso se carga
  • RecyclerView falta
  • Cómo obtener la posición en onCreateViewHolder
  • Aplicación android de Gmail como vista de lista con una letra en el icono
  • Cargando datos de forma eficaz en RecycleView
  • RecyclerView con LinearLayoutManager con vista de encabezado que no recicla
  • AdView adjunto al fondo no me permite ver el último elemento en Recyclerview
  • RecyclerView no se desinscribe del adaptador en el cambio de orientación
  • Bloc de vista de reciclador y problema de repetición
  • Las vistas devuelven NullPointerException en onBindViewHolder en RecyclerView Adapter
  • Cómo rellenar la imagen dentro de ImageView por la costumbre de la izquierda y la coordenada superior | Androide
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.