Android AdapterView?

Los documentos dicen:

Cuando el contenido de su diseño es dinámico o no predeterminado, puede utilizar un diseño que subclases AdapterView para rellenar el diseño con vistas en tiempo de ejecución. Una subclase de la clase AdapterView utiliza un adaptador para vincular datos a su diseño.

Pero la mayoría de los tutoriales están en ListView , GridView , Spinner y Gallery .

Estoy buscando ampliar una subclase directamente de AdapterView . Tengo que crear una vista personalizada que su contenido depende de un adaptador.

¿Cómo puedo hacer esto, y qué métodos deben ser anulados?

En primer lugar, debe estar absolutamente seguro de que AdapterView es lo que quiere, porque no todas las vistas "dinámicas o no predeterminadas" pueden implementarse a través de AdapterView . A veces es mejor que cree su vista extendiendo ViewGroup .

Si desea utilizar AdapterView , eche un vistazo a este ejemplo muy agradable . Hay muchas vistas personalizadas con adaptador en GitHub. Echa un vistazo a este (extiende ViewGroup ) .

Esto puede no ser una respuesta total a su pregunta, pero estoy mostrando lo más probablemente un punto de partida o un puntero que puede guiarlo:

Tutoriales para desarrolladores de Sony – 3D ListView

ListView extiende AbsListView que a su vez amplía AdapterView<ListAdapter> . Por lo tanto, si es absolutamente necesario implementar una vista personalizada desde cero, podría echar un vistazo al código fuente de esas clases:

  • Vista de la lista
  • AbsListView
  • Adaptador de vista

Pero ten cuidado, eso es una tarea. Tal vez puede ser suficiente para usar una de las clases existentes y ajustar la apariencia.

Derivar de AdapterView puede funcionar, pero puede no ser tan beneficioso como usted espera. Parte de la infraestructura proporcionada por AdapterView es privada de paquetes, lo que significa que no tenemos acceso a ella.

Por ejemplo, AdapterView gestiona el índice de elementos seleccionado para AbsListView y ListView . Sin embargo, debido a que los métodos como setNextSelectedPositionInt(int position) (que es la única ruta a la configuración de mNextSelectedPosition ) son privados de paquetes, no podemos llegar a ellos. AbsListView y ListView pueden llegar a ellos porque están en el mismo paquete, pero no podemos.

(Si AdapterView fuente AdapterView encontrarás que setNextSelectedPositionInt() se llama desde handleDataChanged() . Desafortunadamente, handleDataChanged() también es privado de paquete y no se _not_called desde ningún otro lugar dentro de AdapterView que podría ser apalancado para habilitar la posición de configuración.

Esto significa que si necesitas administrar la posición seleccionada, necesitarás recrear esa infraestructura en tu clase derivada (o necesitarás derivar de ListView o AbsListView … aunque sospecho que tendrás problemas similares derivados de AbsListView ). También significa que cualquier funcionalidad de AdapterView que gira en torno a la selección de elementos probablemente no estará completamente operativa.

Podrías crear algo como esto:

 public class SampleAdapter extends BaseAdapter { public SampleAdapter() { // Some constructor } public int getCount() { return count; // Could also be a constant. This indicates the # of times the getView gets invoked. } public Object getItem(int position) { return position; // Returns the position of the current item in the iteration } public long getItemId(int position) { return GridView.INVALID_ROW_ID; } public View getView(int position, View convertView, ViewGroup parent) { View view = null; view = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.some_layout, null); view.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); view.setBackgroungColor(Color.RED); return view; } 

}

Y esto podría ser invocado como:

 GridView sampleView = (GridView) linearLayout.findViewById(R.id.sample_layout); sampleView.setAdapter(new SampleAdapter()); 
  • No se puede iniciar la actividad: UnsupportedOperationException: addView (View, LayoutParams) no es compatible con AdapterView
  • Cómo obtener objeto de listview en setOnItemClickListener en android?
  • Implementación de setselection de customvisionview en Android
  • Spinner: obtener estado o recibir notificación cuando se abre
  • RequestLayout () incorrectamente llamado por android.widget.RelativeLayout android
  • Error de Logcat: "addView (View, LayoutParams) no es compatible con AdapterView" en un ListView
  • Actualizar dinámicamente los tipos de vista de ListView
  • Cómo obtener texto de autocompletar textview android
  • Desplazamiento automático de AdapterView (Listview, GridView, ...)
  • AdapterView.OnItemClickListener con más ListView
  • Android: stackFromBottom = "true" no parece funcionar perfectamente (revertir ListView con el adaptador)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.