Obtener id de recurso desde la vista que se infló

¿Hay una manera de obtener el id de recursos (como R.layout.viewtoInflate) del diseño desde el que se infló una vista?

Estoy tratando de implementar una vista de lista que utiliza 2 diseños personalizados para los elementos de la lista. La disposición de elementos que se utiliza se basa en un campo de los objetos utilizados para rellenar la vista de lista.

Lo que me falta en mi adaptador personalizado es una forma de saber qué recurso se ha inflado el 'convertView' que obtengo en getView (). Si pudiera obtener esa información puedo comparar y determinar si puedo volver a usar la vista de convertir como es o si tengo que reemplazarlo con el diseño adecuado para el elemento actual.

Así que idealmente sería algo como esto:

@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; JSONObject currItem = mItems.getJSONObject(position); int layoutType; if (currItem.getBoolean("alternate")) layoutType = R.layout.list_item_b; else layoutType = R.layout.list_item_a; if (convertView == null || <convertView.resourceID> != layoutType ) { convertView = inflater.inflate(layoutType, null); //Finish setting up new View and its holder } else { //Get view holder for view reuse } //populate view with the required content return convertView; } 

En el peor de los casos, no podía reutilizar las vistas en absoluto y sólo inflar el diseño que necesito cada vez, pero parece muy derrochador.

Hay una forma oficial de utilizar múltiples diseños, simplemente anule getViewTypeCount() y getItemViewType() . Estos métodos informan al Adaptador para esperar múltiples diseños y convertView siempre será el diseño apropiado (por lo que no es necesario comprobar el identificador de recursos). Consulte este ejemplo para obtener algún código de ejemplo.

Pero si desea averiguar qué disposición es la que, simplemente comprobar una característica única. Por ejemplo, puede utilizar findViewById() en una vista que sólo existe en un diseño y, a continuación, compruebe si devuelve null o no.

La vista de lista admite varios diseños. Necesita devolver la cuenta de los diseños utilizados en getViewTypeCount() y el tipo de diseño correcto para la fila en getItemViewType() .

Y si quieres saber qué diseño se infló, entonces puedes adjuntar cualquier información a la vista usando setTag() y recuperarla más tarde usando getTag() – puede ser tu layoutId o cualquier otra cosa.

Lo que hago es guardar el Id de recurso de la vista inflada en el titular de la vista al crear la vista. Esto me permite obtener el ID de recurso de diseño al rellenar las vistas.

Espero que esto ayude.

Si usted está pidiendo para obtener id de los elementos de la disposición que se han inflado. Dice así:-

 //Suppose you have an TextView in the inflated layout of id textView1. Here you go convertView = inflater.inflate(layoutType, null); TextView tv = (TextView)convertview.findViewById(R.id.textView1); 
  • Horizontal ScrollView en el elemento de vista de lista Android
  • ¿No puedo hacer clic en el ListView en android?
  • Android cómo mostrar 2 listas en una actividad una tras otra
  • Cómo actualizar algunos datos en un ListView sin utilizar notifyDataSetChanged ()?
  • RealmBaseAdapter con encabezados de sección
  • ¿Por qué obtengo NullPointerException cuando uso setCurrentText o setText para TextSwitcher?
  • Android - ListView con imágenes se desplaza demasiado lento incluso sin ningún procesamiento en el método getView del adaptador
  • SmoothScrollToPosition no funciona?
  • MVVMCross cambiando ViewModel dentro de un MvxBindableListView
  • Android: Fragment y ViewPager comienza siempre en la primera posición
  • setEmptyView () no parece funcionar para (Sherlock) ListFragment
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.