RecyclerView LayoutManager findViewByPosition devuelve null

Estoy interesado en cuál es el momento correcto y el primero posible para obtener el tamaño del primer elemento de RecyclerView?

He intentado utilizar:

recyclerView.setLayoutManager(new GridLayoutManager(context, 2)); recyclerView.setAdapter(new MyDymmyGridRecyclerAdapter(context)); recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this); View firstRecyclerViewItem = recyclerView.getLayoutManager().findViewByPosition(0); // firstRecyclerViewItem is null here } }); 

Pero devuelve null en este momento.

Si está usando OnGlobalLayoutListener debe recordar que onGlobalLayout se puede llamar varias veces. Algunas de esas llamadas pueden suceder incluso antes de que Layout esté listo (y por pronto me refiero al momento en que puede obtener las dimensiones de una View llamando a view.getHeight() o view.getWidth() ). Así que la forma correcta de implementar su enfoque sería:

 recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int width = recyclerView.getWidth(); int height = recyclerView.getHeight(); if (width > 0 && height > 0) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } else { recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } } View firstRecyclerViewItem = recyclerView.getLayoutManager().findViewByPosition(0); } }); 

Aparte de eso, usted todavía necesita estar seguro de que en el momento de findViewByPosition(0) llamar:

  1. El Adapter RecyclerView's tiene al menos un elemento de datos.
  2. View en la posición 0 está visible en RecyclerView

Dime si eso arregla tu problema, si no hay todavía otra manera de hacer lo que necesitas.

En mi RecyclerView extendido onChildAttachedToWindow como esto

 @Override public void onChildAttachedToWindow(View child) { super.onChildAttachedToWindow(child); if (!mIsChildHeightSet) { // only need height of one child as they are all the same height child.measure(0, 0); // do stuff with child.getMeasuredHeight() mIsChildHeightSet = true; } } 

Tuve este tipo de problema. Quiero realizar un clic por defecto en la primera posición visible de la recylerview. Escribí el código para que en onResume pero no funcionó. He resuelto mi problema escribiendo el código en el método onWindowFocusChanged

  @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(isCalledForTheFirstTime) { LinearLayoutManager manager= (LinearLayoutManager) rcViewHeader.getLayoutManager(); int pos= manager.findFirstCompletelyVisibleItemPosition(); View view=manager.findViewByPosition(pos); if(view!=null) { view.performClick(); } // change the vaule so that it would not be call in case a pop up appear or disappear isCalledForTheFirstTime=false; } } 
  • Mostrar la vista personalizada bajo el elemento RecyclerView deslizado
  • RecyclerView - Obtener una vista en posición particular
  • RecyclerView desplazado UP / DOWN oyente
  • ¿Necesito dependencia de Gradle para RecyclerView?
  • Transición de elemento compartido en RecyclerView
  • Error al inflar la clase android.support.v7.widget.RecyclerView
  • Diferencia entre android.support.v7.app.AlertController.RecycleListView y android.support.v7.widget.RecyclerView
  • ¿Cómo centrar los elementos de RecyclerView?
  • Android - Cómo detener la recarga de imágenes en Recyclerview al desplazarse
  • ¿Cómo implementar multi-select en RecyclerView?
  • Resaltar el elemento seleccionado dentro de un RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.