Obtenga un ID de recurso desde el cual se influnda la vista -- android campo con android-layout campo con listview campo con android-resources camp Relacionados El problema

Get resource id from which view was inflated


5
vote

problema

Español

¿Hay alguna manera de obtener la ID de recursos (como r.layout.viewtoinflate) del diseño del cual se infló una vista?

Estoy tratando de implementar una vista de lista que utiliza 2 diseños personalizados para los elementos de la lista. ¿Qué diseño del artículo se usa se basa en un campo en los objetos utilizados para rellenar la vista de lista?

Lo que estoy perdiendo en mi adaptador personalizado es una forma de saber qué recurso la 'Convidrio' que recibo en GetView () se inflaron. Si pudiera obtener esa información, puedo comparar y determinar si puedo reutilizar la vista convertir, ya que es o si tengo que reemplazarlo con el diseño apropiado para el elemento actual.

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, simplemente no podía volver a usar las vistas y simplemente inflar el diseño que necesito cada vez, pero parece muy desperdiciado.

Original en ingles

Is there a way to obtain the resources id (like R.layout.viewtoInflate) of the layout from which a view was inflated?

I am trying to implement a List View that uses 2 custom layouts for the list items. Which item layout is used is based on a field in the objects used to populate the list view.

What I am missing in my custom adapter is a way to know what resource the 'convertView' I get in the getView() was inflated from. If I could get that info I can compare and determine whether I can re-use the convert view as it is or if I have to replace it with the appropriate layout for the current item.

So ideally it would be something like this:

@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; } 

At worst I could just not re-use views at all and just inflate the layout I need every time, but it seems very wasteful.

           

Lista de respuestas

5
 
vote
vote
La mejor respuesta
 

Hay una manera oficial a utilizar varios diseños, simplemente anular getViewTypeCount() y getItemViewType() . Estos métodos informan al adaptador de esperar varios diseños y convertView será siempre la disposición adecuada (por lo que no es necesario y verificar la identificación de recursos.) Por favor, consulte este ejemplo por algún código de ejemplo.

Pero si quieres saber qué diseño es el que, simplemente comprobar si hay una característica única. Por ejemplo, puede usar findViewById() en una vista que sólo existe en un solo diseño, a continuación, comprobar si se vuelve LIKE0 o no.

 

There is an official way to use multiple layouts, simply override getViewTypeCount() and getItemViewType(). These methods inform the Adapter to expect multiple layouts and convertView will always be the appropriate layout (so don't need to check the resource id.) Please see this example for some sample code.

But if you want to find out which layout is which, simply check for a unique characteristic. For example you can use findViewById() on a View that only exists in one layout, then check whether it returns null or not.

 
 
 
 
3
 
vote

La vista de lista admite múltiples diseños: debe devolver el recuento de diseños utilizados en getViewTypeCount() y el tipo de diseño correcto para la fila en getItemViewType() .

Y si quiere saber a qué diseño se inflaron, entonces puede adjuntar cualquier información a la vista usando setTag() y recupere más tarde usando getTag() - IT Puede ser su diseño o cualquier otra cosa.

 

List view supports multiple layouts - you need to return count of layouts used in getViewTypeCount() and correct layout type for the row in getItemViewType().

And if you want still to know what layout it was inflated from, then you can attach any information to the view using setTag() and retrieve it later using getTag() - it can be your layoutId or anything else.

 
 
1
 
vote

Lo que hago es guardar el ID de recurso de la vista inflada en el soporte de la vista al crear la vista. Esto me permite obtener el ID de recursos de diseño cuando estoy poblando las vistas.

Espero que esto ayude.

 

What I do is save the resource Id of the inflated view in the view holder when creating the view. This allows me to get the layout resource ID when I am populating the views.

Hope this helps.

 
 
-1
 
vote

Si está solicitando obtener la identificación de los artículos del diseño que ha inflado. Va 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);   
 

If you are asking for getting id's of items from the layout which you have inflated. It goes like this:-

//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); 
 
 
 
 

Relacionados problema

12  Usando un encuadernación con una matriz de cadena de los recursos  ( Using a bindingadapter with a string array from the resources ) 
Tengo una idea simple de casi : quiero generar un adaptador para un hilandero con la API de enlace de datos y un encuadernación. Aquí está el XML que quiero ...

2  Separando string.xml en una aplicación de Android  ( Separating string xml in an android application ) 
Hay alguna forma de separar string.xml en la aplicación de Android. En mi caso, tengo 5 grandes módulos (que lo crearé) como los usuarios de Module, Gismodule...

0  Acceso a recursos en una matriz final estática en una clase de utilidad  ( Accessing resources in a static final array in a utility class ) 
Tengo una clase de utilidad para diagnósticos (información de tiempo de ejecución, eventos de advertencia y error) que definen los códigos, los niveles de gra...

131  Cómo corregir: Android.app.RemoteserviceException: Bad Notification Publicado en paquete *: No se pudo crear icono: estadoBaricon  ( How to fix android app remoteserviceexception bad notification posted from pac ) 
Estoy viendo la siguiente excepción en los registros de choque: android.app.RemoteServiceException: Bad notification posted from package com.my.package: Co...

4  Navegación de navegación ONCLICK DE XML causa errores  ( Navigationview onclick from xml causes errors ) 
Uso de navegación de Navegación de la biblioteca de diseño de soporte Android recién lanzada, si un diseño de encabezado de navegación incluye un ONCLICK (en ...

0  ¿Cómo verificar el valor de un archivo de recursos personalizado? [duplicar]  ( How to check the value of a custom resource file ) 
Esta pregunta ya tiene respuestas aquí : Comparación de cadenas - Android ...

7  Añadiendo directorios a las carpetas de recursos en Android  ( Adding directories to resources folders in android ) 
Si tengo un proyecto grande con muchos recursos, ¿hay alguna de todos modos para organizarlos usando directorios? Me cansé de agregar directorios a dibujable ...

2  Cómo cargar archivos específicos para diferentes países en Android [Duplicar]  ( How to load specific files for different countries in android ) 
Esta pregunta ya tiene respuestas aquí : Cerrado hace 8 años . posible duplicado: Cambiar ...

49  Recursos Android $ NotFoundException: ID de recurso # 0x7f030027  ( Android resourcesnotfoundexception resource id 0x7f030027 ) 
Estaba trabajando en mi programa de Android y cuando intenté probarlo, de repente, comencé a obtener un error que fue "android.content.res.resources $ NotFoun...

0  Imagen de la pantalla de salpicaduras en Android  ( Splash screen image in android ) 
Es necesario cambiar el tamaño de las imágenes de la pantalla de inicio para diferentes tamaños de pantalla o está bien para mantener una imagen con la resolu...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos