Android RecyclerView adición y eliminación de artículos

Tengo un RecyclerView con un cuadro de texto TextView y un botón de la cruz ImageView. Tengo un botón fuera de la recyclerview que hace que el botón de la cruz ImageView visible / ido.

Estoy buscando para quitar un elemento de la recylerview, cuando los elementos cruzar botón ImageView se presiona.

Mi adaptador:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener { private ArrayList<String> mDataset; private static Context sContext; public MyAdapter(Context context, ArrayList<String> myDataset) { mDataset = myDataset; sContext = context; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false); ViewHolder holder = new ViewHolder(v); holder.mNameTextView.setOnClickListener(MyAdapter.this); holder.mNameTextView.setOnLongClickListener(MyAdapter.this); holder.mNameTextView.setTag(holder); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mNameTextView.setText(mDataset.get(position)); } @Override public int getItemCount() { return mDataset.size(); } @Override public void onClick(View view) { ViewHolder holder = (ViewHolder) view.getTag(); if (view.getId() == holder.mNameTextView.getId()) { Toast.makeText(sContext, holder.mNameTextView.getText(), Toast.LENGTH_SHORT).show(); } } @Override public boolean onLongClick(View view) { ViewHolder holder = (ViewHolder) view.getTag(); if (view.getId() == holder.mNameTextView.getId()) { mDataset.remove(holder.getPosition()); notifyDataSetChanged(); Toast.makeText(sContext, "Item " + holder.mNameTextView.getText() + " has been removed from list", Toast.LENGTH_SHORT).show(); } return false; } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mNumberRowTextView; public TextView mNameTextView; public ViewHolder(View v) { super(v); mNameTextView = (TextView) v.findViewById(R.id.nameTextView); } } } 

Mi diseño es:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:id="@+id/layout"> <TextView android:id="@+id/nameTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:padding="5dp" android:background="@drawable/greyline"/> <ImageView android:id="@+id/crossButton" android:layout_width="16dp" android:layout_height="16dp" android:visibility="gone" android:layout_marginLeft="50dp" android:src="@drawable/cross" /> </LinearLayout> 

¿Cómo puedo obtener algo como un onClick trabajando para mi crossButton ImageView? ¿Hay una mejor manera? ¿Tal vez cambiando el onclick todo del artículo en un quita el artículo? La vista de reciclaje muestra una lista de ubicaciones que necesitan ser editadas. Cualquier asesoramiento técnico o comentarios / sugerencias sobre la mejor implementación sería muy apreciado.

He hecho algo similar. En su MyAdapter :

 public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ public CardView mCardView; public TextView mTextViewTitle; public TextView mTextViewContent; public ImageView mImageViewContentPic; //...... public ImageView imgViewRemoveIcon; public ViewHolder(View v) { super(v); mCardView = (CardView) v.findViewById(R.id.card_view); mTextViewTitle = (TextView) v.findViewById(R.id.item_title); mTextViewContent = (TextView) v.findViewById(R.id.item_content); mImageViewContentPic = (ImageView) v.findViewById(R.id.item_content_pic); //...... imgViewRemoveIcon = (ImageView) v.findViewById(R.id.remove_icon); mTextViewContent.setOnClickListener(this); imgViewRemoveIcon.setOnClickListener(this); v.setOnClickListener(this); mTextViewContent.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { if (mItemClickListener != null) { mItemClickListener.onItemClick(view, getPosition()); } return false; } }); } @Override public void onClick(View v) { //Log.d("View: ", v.toString()); //Toast.makeText(v.getContext(), mTextViewTitle.getText() + " position = " + getPosition(), Toast.LENGTH_SHORT).show(); if(v.equals(imgViewRemoveIcon)){ removeAt(getPosition()); }else if (mItemClickListener != null) { mItemClickListener.onItemClick(v, getPosition()); } } } public void setOnItemClickListener(final OnItemClickListener mItemClickListener) { this.mItemClickListener = mItemClickListener; } public void removeAt(int position) { mDataset.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, mDataSet.size()); } 

Espero que esto ayude.

Editar:

getPosition() es depricated ahora usa getAdapterPosition() lugar.

En primer lugar, el elemento debe ser eliminado de la lista!

  mDataSet.remove(getAdapterPosition()); 

entonces:

  notifyItemRemoved(getAdapterPosition()); notifyItemRangeChanged(getAdapterPosition(),mDataSet.size()); 

Si todavía el artículo no quitado utiliza este método mágico 🙂

 private void deleteItem(int position) { mDataSet.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, mDataSet.size()); holder.itemView.setVisibility(View.GONE); } 

He intentado todas las respuestas anteriores, pero la inserción o eliminación de elementos a recyclerview causa problemas con la posición en el conjunto de datos. Terminó usando delete(getAdapterPosition()); Dentro del viewHolder que funcionó muy bien para encontrar la posición de los elementos.

El problema que tuve fue que estaba eliminando un elemento de la lista que ya no estaba asociado con el adaptador para asegurarse de que está modificando el adaptador correcto que puede implementar un método como este en su adaptador:

 public void removeItemAtPosition(int position) { items.remove(position); } 

Y llámalo en tu fragmento o actividad como esta:

 adapter.removeItemAtPosition(position); 
  • ¿Cuál es el equivalente listview.setSelection en caso de Recycler View
  • Java.lang.Throwable: addInArray en RecyclerView
  • Cómo recorrer los elementos en Android RecyclerView?
  • Recyclerview desplazamiento pasado FAB
  • RecyclerView add EmptyView
  • Cómo obtener un desplazamiento en RecyclerView ItemDecorator
  • RecyclerView desordenado los datos al desplazarse
  • RecyclerView - saltar a la posición, luego desplazamiento suave hasta la parte superior
  • Eliminación de divisor después de un pie de página en una Recyclerview
  • RecyclerView Deslice con una vista inferior y no detecte clic
  • RecylcerView se desplaza a la parte superior del elemento eliminado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.