RecyclerView LinearLayout manager siempre devuelve -1 en modo horizontal – findLastCompletelyVisibleItemPosition ()
Estoy usando findLastCompletelyVisibleItemPosition()
para determinar el último elemento visible en mi RecyclerView.
Aquí está un fragmento de código de cómo estoy configurando mi diseño:
- No hay efecto de ondulación en el tacto en la vista de reciclaje
- RecyclerView ItemTouchHelper Action_Drag_Ended?
- Android recylerview v.23.2.0 y la biblioteca de diseño v.23.2.0 están rotas
- Android RecyclerView crea y enlaza todas las vistas en el cambio de conjunto de datos
- Cómo poner RecyclerView abajo CollapsingToolbarLayout y responder a la barra de herramientas cuando se derrumbó en Android
mRecyclerView.setHasFixedSize(true); LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext()); mRecyclerView.setLayoutManager(mLayoutManager);
Diseño XML:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipe_container" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/message_list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:paddingBottom="@dimen/footer_progress_bar" android:paddingTop="16dp" android:scrollbars="vertical" /> <ProgressBar android:id="@+id/progress_bar" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:visibility="gone" /> <ProgressBar android:id="@+id/footer_progress_bar" android:layout_width="@dimen/footer_progress_bar" android:layout_height="@dimen/footer_progress_bar" android:layout_gravity="center|bottom" android:visibility="gone" /> </FrameLayout> </android.support.v4.widget.SwipeRefreshLayout>
En modo retrato, esto funciona bien y siempre devuelve la posición correcta.
Sin embargo, en modo horizontal, la posición devuelta siempre es -1.
Mi pregunta es:
¿Alguien sabe por qué pasa esto?
¿Cómo puedo anular esto para devolver la posición correcta?
¿O alguien puede recomendar otra solución para obtener la posición correcta del último elemento en el paisaje?
- Recyclerview con fondo de desplazamiento
- Recycler view + Ver Pager + Nailed ScrollView + CoordinatorLayout
- Arrastrar y soltar entre dos vistas de reciclaje
- Anuncios Admob nativos en RecyclerView
- Adición de efecto de ondulación a RecyclerView item
- CoordinatorLayout usando el RecyclerView de ViewPager
- Variable número de columnas en GridLayoutManager
- RecyclerView: encuentra el último elemento visible inmediatamente después de la vista
El "-1" que está viendo es el código de retorno RecyclerView.NO_POSITION
que indica que no hay una posición completamente visible en su RecyclerView en modo horizontal. "Completamente visible" significa que toda la vista incluyendo cualquier decoración y sus márgenes (márgenes superior / inferior para la orientación vertical y izquierda / derecha para las orientaciones horizontales) es visible. Es posible que vea todos sus datos, pero un solo píxel podría quedar fuera de la vista. Eche un vistazo a findLastCompletelyVisibleItemPosition()
y su invocación de findOneVisibleChild()
aquí .
Compruebe que tiene una posición 100% visible en su RecyclerView como se indica arriba. Mostrar márgenes en el modo de desarrollador, etc. Otra cosa más misteriosa está sucediendo si verifica que hay al menos una posición completamente visible.
Esto sucede porque no hay ningún elemento completamente visible, esto se debe a que no hay elementos mostrados en absoluto, o sus elementos son más grandes que su pantalla y por lo tanto no son completamente visibles.
Debe considerar utilizar el método findLastVisibleItemPosition()
para obtener el último elemento visible en la pantalla, aunque esto devolverá la posición del último elemento visible en la pantalla, aunque sea sólo un píxel de ese elemento. No sé si esto llenará sus requisitos, si no, usted puede ser que quiera crear una nueva pregunta con más contexto / detalles sobre sus requisitos.
¿Ha intentado inicializarlo en if (savedInstanceState == null)
if (savedInstanceState == null){ mRecyclerView.setHasFixedSize(true); LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext()); mRecyclerView.setLayoutManager(mLayoutManager); } else { // Do nothing }
- Abre la actividad A y carga un fragmento específico de la actividad A de la actividad B
- No se pudo leer la fila 0, col -1 de CursorWindow?