Retos en RecyclerView de Android L
He estado jugando con RecyclerView
un poco. ¿Hay alguna manera fácil de poner OnClickListener
para artículos en RecyclerView
? He intentado implementarlo en ViewHolder
. El evento onClick nunca se activó.
Y he utilizado notifyItemInserted(position)
para agregar nuevo valor en RecyclerView
. La interfaz de usuario no se actualiza automáticamente. Necesitaba subir y bajar para refrescar. Pero cuando invoco notifyDatasetChanged(..)
, está bien.
- Imagen parpadeando mientras se desplaza en RecyclerView
- ¿Cómo evitar la reordenación de elementos en StaggeredGridLayoutManager después del cambio de orientación?
- Picasso problema de extracción de imágenes cuando se utiliza con RecyclerView
- ¿Cómo utilizo un GridLayoutAnimation en un RecyclerView?
- Uso de la vista de reciclaje con una base de datos
He aplicado DefaultItemAnimator
a RecyclerView
. Pero, no viendo ninguna animación cuando se agregó un nuevo elemento.
Gracias por adelantado para cualquier idea.
Este es el primer Android L componente que he probado y estoy stucking allí.
Aquí está mi clase de adaptador:
public class AdapterRecyclerView extends RecyclerView.Adapter<AdapterRecyclerView.MyViewHolder> { private List<String> arrExperiences; //Provide a reference to the type of views that you are using - Custom ViewHolder public class MyViewHolder extends RecyclerView.ViewHolder { public TextView tvExperienceTitle; public TextView tvExperienceDesc; public MyViewHolder(RelativeLayout itemView) { super(itemView); tvExperienceTitle = (TextView) itemView.findViewById(R.id.tv_experience_title); tvExperienceDesc = (TextView) itemView.findViewById(R.id.tv_experience_desc); } } //Provide a suitable constructor : depending on the kind of dataset. public AdapterRecyclerView(List<String> arrExperiences){ this.arrExperiences = arrExperiences; } //Create new view : invoke by a Layout Manager @Override public AdapterRecyclerView.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RelativeLayout view = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item_recycler, parent, false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(AdapterRecyclerView.MyViewHolder viewHolder, int position) { //get element from your dataset at this position. //replace the content of the view with this element. viewHolder.tvExperienceTitle.setText(arrExperiences.get(position)); } @Override public int getItemCount() { return arrExperiences.size(); } public void addExperience(String experience, int position){ arrExperiences.add(position, experience); notifyItemInserted(position); //notifyDataSetChanged(); } public void removeExperience(){ int index = (int) (Math.random() * arrExperiences.size()); arrExperiences.remove(index); notifyItemRemoved(index); //notifyDataSetChanged(); } }
- Error al inflar la clase RecyclerView
- Cómo implementar gridlayoutmanager horizontal
- RecyclerView Expandir / Contraer elementos
- Centrar un CardView en un RecyclerView con un solo elemento
- Personalizar RecyclerView LayoutManager no fling (sin problemas)
- Android: RecyclerView dentro del viewpager vertical
- Android 5.0 - Agregar cabecera / pie de página a un RecyclerView
- RecyclerView notifyItemInserted IllegalStateException
Simplemente agrega esto en tu adaptador:
@Override public void onBindViewHolder(AdapterRecyclerView.MyViewHolder viewHolder, int position) { yourItems.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //do your stuff } }); }
Espero que puedas aceptar esta respuesta.
Por favor vea mi respuesta aquí . Necesita una clase extra (que puede incluirse como parte de la versión completa), pero le permitirá crear OnItemClickListeners de la forma en que está acostumbrado a ListViews.
Puesto que usted todavía no marcó ninguna respuesta correcta, e incluso si es una vieja pregunta, intentaré proporcionar la manera que hago. Creo que es muy limpio y profesional. Las funcionalidades se toman de diferentes blogs (todavía tengo que mencionarlos en la página), se fusionaron y se han mejorado los métodos de velocidad y escalabilidad, para todas las actividades que utilizan un RecycleView.
https://github.com/davideas/FlexibleAdapter
- En la clase inferior hay SelectableAdapter que proporciona funcionalidades de selección y es capaz de mantener el estado después de la rotación, sólo tiene que llamar a los métodos onSave / onRestore de la actividad.
- Entonces la clase FlexibleAdapter maneja el contenido con el apoyo de la animación (llamando notificar sólo para la posición.) Nota: todavía debe configurar su animación en el RecyclerView cuando se crea la actividad.
- Entonces necesitas extender otra vez esta clase. Aquí agrega e implementa métodos como desee para su propio ViewHolder y su clase de Dominio / Modelo (titular de datos). Nota: He proporcionado un ejemplo que no compila porque usted necesita cambiar las clases con las que usted tiene en su proyecto.
Creo que es el ViewHolder el que debe mantener a los oyentes de los clics y que debe hacerse en la creación y no en el método Binding (que se llama en cada invalidate de notify … ()).
También tenga en cuenta que este adaptador controla los clics básicos: clics simples y largos, si necesita un doble toque, debe utilizar la forma en que Jabob Tabak hace en su respuesta.
Todavía tengo que mejorarlo, así que vigilarlo. También quiero añadir algunas nuevas funcionalidades como Deshacer.
Aquí obtendrá una clase de adaptador simple que puede realizar onItemClick
evento onItemClick
en cada fila de la lista para recyclerview
.