Cómo utilizar D-pad navegar cambiar entre la fila de listview y sus decendants (soporte de Google-TV)

Tengo un listview que tiene una vista de la imagen dentro de cada artículo de la lista, cuando el usuario chasca en ese imageview, él aparecerá un menú.

Funciona muy bien en un dispositivo android normal con una pantalla táctil.

Pero ahora quiero apoyar google-tv, que la aplicación debe ser el control de D-pad.

Cuando utilizo D-pad para navegar a través de listview, sólo la fila entera puede ser el enfoque, no puedo obtener la vista de la imagen dentro de listview ser foco.

Intento agregar android: focusable = "true" a la vista de la imagen, pero causa que el listview entero no pueda recibir el acontecimiento de onItemClick.

¿Alguien sabe cómo mover el foco entre las filas listview y el elemento dentro de listview usando d-pad también mantiene listview y imageview clicable?

¡Muchas gracias!

Debe establecer lo siguiente para su ListView:

listView.setItemsCanFocus(true); 

Con que las vistas focusable dentro de su listItems no serán ignoradas.

Conseguí mi trabajo de Listview con el D-cojín que puede cambiar el foco dentro de un artículo de la lista. Así es como lo resuelvo. En primer lugar, deje que su vista de lista se enfoque.

NOTA: Si está intentando establecer ItemsCanFocus a false más adelante en su código, encontrará que su elemento de lista no puede centrarse más, incluso si su conjunto de nuevo a true, así que no lo hagas.

 mDpadListView.setItemsCanFocus(true); 

A continuación, necesita un campo para seguir el seguimiento de qué elemento de la lista está seleccionada actualmente. Aquí pongo el ViewHolder en la etiqueta del listItem en el adaptador.

 mDpadListView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (view.getTag() != null) { DpadListAdapter.ViewHolder holder = (ViewHolder) view.getTag(); if (holder.shortCut != null && holder.shortCut.isShown()) { currentSelectView = view; } else { currentSelectView = null; } } else { currentSelectView = null; } } @Override public void onNothingSelected(AdapterView<?> parent) { } }); 

En tercer lugar, anula onKeyDown () en Activity Method para controlar las teclas arriba, abajo, izquierda y derecha para D-pad.

Cuando el usuario pulsa el botón derecho en el D-pad, dejo que el listview de clearFoucs () y dejar que el ImageView dentro para obtener el enfoque.

Cuando el usuario presiona hacia arriba, hacia abajo o hacia la izquierda, ImageView en el elemento de lista se borrará el foco y el listView obtendrá de nuevo el enfoque.

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_RIGHT: if (currentSelectView != null) { DpadListAdapter.ViewHolder holder = (ViewHolder) currentSelectView.getTag(); mDpadListView.clearFocus(); holder.shortCut.setFocusable(true); holder.shortCut.requestFocus(); return true; } break; case KeyEvent.KEYCODE_DPAD_LEFT: case KeyEvent.KEYCODE_DPAD_UP: case KeyEvent.KEYCODE_DPAD_DOWN: if (currentSelectView != null) { DpadListAdapter.ViewHolder holder = (ViewHolder) currentSelectView.getTag(); if (holder.shortCut.hasFocus()) { holder.shortCut.clearFocus(); holder.shortCut.setFocusable(false); mDpadView.requestFocus(); return true; } } break; default: break; } return super.onKeyDown(keyCode, event); } 

Puede utilizar las propiedades para acceder al D-pad como se muestra a continuación en el archivo de diseño:

  android:nextFocusLeft="@+id/abc" android:nextFocusRight="@+id/xyz" android:nextFocusUp="@+id/pqr" android:nextFocusDown="@+id/mno" android:nextFocusForward="@+id/finish" 

Todas estas propiedades le ayudarán a acceder al D-pad en Google-TV.

  • Cómo puede acceder a la memoria externa en Google TV
  • Android TV no está iniciando LAUNCH_LEANBACK Actividad
  • Identificar GoogleTv desde la aplicación de Android
  • Dispositivos Android: asura, águila y ka
  • El paseo de Google TV parece incorrecto. ¿Complementos de terceros?
  • Creación de Google TV AVD en ventanas que no detectan x86 Imagen del sistema
  • Cómo configurar el control focusable de Android ActionBar mediante programación
  • MediaPlayer para Android / VideoView con subtítulos (SRT)
  • Se necesita la guía compleja de diseño de la interfaz de usuario de Android (fragmentos)
  • ¿Cómo puedo solucionar problemas de visibilidad de html.fromHtml link focus (en ICS y Honeycomb)?
  • Apertura de vídeo RTSP en VideoView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.