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.

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(); } } 

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 .

  • Cómo ordenar Strings en un Android RecyclerView?
  • Efecto de ondulación de Android anulado por el estado seleccionado
  • Cómo crear una interfaz de usuario como la aplicación Inbox de Google en Android
  • Recycleview en el conjunto de coordenadas
  • La forma más sencilla de mostrar Cuerdas con iconos en un RecyclerView
  • Error al inflar la clase y android.support.v7.widget.CardView
  • ¿Cómo deslizar para borrar en RecyclerView?
  • ¿No puede actualizar RecyclerView desde mi clase de modelo?
  • Android: Control Desplazamiento suave sobre la vista del reciclador
  • RecyclerView no se actualiza después de NotifyDataSetChanged (), el contenido aparece después de encender y apagar la pantalla
  • Endless RecyclerView con ProgressBar para paginación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.