Necesito obtener el índice del elemento seleccionado / enfocado del VerticalGridFragment. Encontré el método para configurar el elemento seleccionado en la documentación https://developer.android.com/reference/android/support/v17/leanback/app/VerticalGridFragment.html, es decir, setSelectedPosition (int position) que establece la posición del elemento seleccionado.

Pero no pude encontrar ningún método en la documentación que proporcione el elemento seleccionado o su índice.

¿Puede alguien ayudarme a encontrar una solución para obtener el elemento seleccionado de un VerticalGridFragment?

4
Abhishek 23 jun. 2017 a las 11:09

3 respuestas

La mejor respuesta

No puede obtener la posición de enfoque, pero puede obtener el objeto de enfoque. Debajo de mothod setAdapter(mAdapter); puedes escribir:

setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
        @Override
        public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
            Object object = (Object) item;
            //can write somethings here
        }
    });
0
Morteza Jalambadani 2 may. 2018 a las 08:25

Puede usar la interfaz OnItemViewSelectedListener en Leanback para recibir notificaciones cuando se selecciona una fila o elemento.

Ver el concepto de la selección actual es diferente al enfoque. Se puede seleccionar una fila o elemento sin tener foco. Por ejemplo, cuando una vista de encabezado de fila gana el foco, se selecciona la vista de fila correspondiente.

MRowsAdapter es su ArrayObjectAdapter, se requieren pocas conversiones para obtener el índice de fila actual y el índice de elemento actual.

Entonces, primero obtiene el adaptador de filas y al convertir su adaptador de filas a ArrayObjectAdapter obtiene el adaptador (que no es más que el adaptador de filas solamente) que contiene elementos en estas filas.

       OnItemViewSelectedListener { itemViewHolder, item, rowViewHolder, row ->

            val indexOfRow = mRowsAdapter.indexOf(row)
            val indexOfItem = ((row as ListRow).adapter as ArrayObjectAdapter).indexOf(item)
            Toast.makeText(context, "$indexOfItem-$indexOfRow", Toast.LENGTH_SHORT).show()

            }
        }
0
Arpit J. 7 mar. 2020 a las 10:01

Obtienes la posición del artículo seleccionado.

private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
        @Override
        public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
            int position=  mAdapter.indexOf(item);

        }
}
3
Morteza Jalambadani 2 may. 2018 a las 10:54