Recyclerview (Obtener elemento en Recyclerview)

He implementado SearchView + Recyclerview usando esto en github. GITHUB
Mi siguiente paso es conseguir que el elemento en la parte seleccionada en el recyclerview.
Entonces vi un código para que el niño recibiera información sobre el reciclaje.
El código funciona cuando getChildAt (índice) = 0.
Pero cuando pongo índice = 12 o mayor que eso.
El programa se estrelló.

mRecyclerView.setAdapter(mAdapter); mRecyclerView.addOnItemTouchListener( new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { final int valueThisIteration = position; mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { TextView textViewDrawerTitle = (TextView) mRecyclerView.getChildAt(valueThisIteration).findViewById(R.id.tvText); textViewDrawerTitle.setText("Checked"); mRecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); } }) ); 

Y estoy recibiendo este error.

 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: FATAL EXCEPTION: main 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: Process: com.thesis.juandirection.juandirectionfinale, PID: 1629 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at com.thesis.juandirection.juandirectionfinale.fragments.FragmentSearch$1$1.onGlobalLayout(FragmentSearch.java:94) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:815) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1867) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:580) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:550) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5221) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 11-04 09:36:02.818 1629-1629/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Para manejar clics de elementos en un RecyclerView, le recomiendo que mueva su lógica al ViewHolder de su adaptador. Puede tener su ViewHolder implementar View.OnClickListener y reemplazar el método OnClick() para preformar una acción. Si su acción depende del elemento que ha hecho clic, puede hacer referencia a él mediante getAdapterPosition() . El código se verá así:

 public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnItemClickListener { public MyViewHolder(View view) { super(view); view.setOnClickListener(this); } @Override public void OnClick(View view) { // Get the item clicked // For this example, I'm assuming your data source is of type `List<MyObject>` MyObject myObject = mDataSource.get(getAdapterPosition()); // Then you can do any actions on it, for example - myObject.setChecked(); } } 

Es evidente que la lógica que sucede dentro de OnClick cambiará a su ejemplo, pero espero que esto le pone en el camino correcto. Para obtener otra muestra de esto, así como un poco de una explicación de las ventajas de manejar la lógica de clics dentro de ViewHolder, echa un vistazo a una entrada de blog que escribí comparando RecyclerView y ListView (busca la sección denominada "Más explícita en los oyentes de clic"). .

  • Android Recyclerview GridLayoutManager espaciamiento de columnas
  • Manejar el artículo con un clic largo en la vista del reciclador
  • Pasar la posición en el ListView al niño RecyclerView Adapter
  • Android: Recyclerview horizontal dentro de una Recyclerview vertical
  • Cómo permanecer en una posición de desplazamiento en RecyclerView después de añadir elementos en su primer índice y llamar a notificydatasetchange
  • Actualización parcial de RecyclerView.ViewHolder
  • ¿Cómo puedo obtener la posición seleccionada en un RecyclerView?
  • No se puede escribir un algoritmo para filtrar elementos en un RecyclerView basado en un tiempo guardado con cada elemento
  • Android setOnScrollListner en RecyclerView obsoleta
  • Cómo hacer la vista de mensaje roscado con enviar y recibir mensajes en dos lados con la vista de reciclador
  • Problemas para recrear listas de diseño de materiales con licencia en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.