Cómo agregar la misma vista a los padres varias veces inflando sólo una vez
Tengo un LinearLayout con la orientación vertical como padre, quiero agregar alguna vista programáticamente varias veces a este padre. En este momento estoy inflando al niño cada vez que recibo nuevas referencias a cada elemento de la interfaz de usuario antes de agregar a los padres. Esto no parece ser muy eficiente, hay alguna manera mejor de hacer esto.
El código actual que estoy usando está por debajo, si solo hinco una vez antes para obtener el bucle error de tiempo de ejecución "especificó que el niño ya tiene un padre. Debe llamar a removeView () al padre del niño primero."
- Navegación de Android Visualización del menú de configuración mediante programación
- Android Ver agregar niño
- Diferencia entre findViewById (R.id.content) y getRootView ()
- Retrasar la llamada a onQueryTextChange () en SearchView.OnQueryTextListener con SearchView
- Establecer una imagen de fondo en una vista extiende mi vista
LayoutInflater inflator = LayoutInflater.from(getBaseContext()); LinearLayout parentPanel = findViewById(R.id.parent_pannel); ArrayList<String> myList = getData(); for(String data : myList) { // inflate child View item = inflator.inflate(R.layout.list_item, null); // initialize review UI TextView dataText = (TextView) item.findViewById(R.id.data); // set data dataText.setText(data); // add child parentPanel.addView(item); }
- Cambio de vista dentro de TabHost (una actividad, varias vistas)
- Cómo implementar la búsqueda por voz en SearchView
- GridLayout empuja a sus hijos y desbordamiento cuando se le da fill_parent para la altura
- OnMeasure (): wrap_content, ¿cómo puedo saber el tamaño para envolver?
- Android SearchView con otros elementos de ActionBar
- Cuál es la ventaja de usar el espacio sobre la vista
- Android está redibujando todas las vistas al aplicar la animación en una vista
- Diseño de Android con visibilidad GONE
¿Realmente comprobó si el inflado es lento? Por lo que yo sé, inflar vista es muy rápido (casi tan rápido como crear vistas manualmente).
Podría ser sorprendente para que usted pueda oír, pero inflar de hecho no analizar los XML en absoluto. Los XML para el diseño se analizan y pre-procesan en tiempo de compilación – se almacenan en un formulario binario que hace que la inflación de vista sea muy eficiente (por eso no se puede inflar una vista desde un XML generado en tiempo de ejecución).
No se puede , incluso si se intenta crear una new view
desde el objeto de view
antiguo el objeto se pasará por referencia no valor, y por lo tanto obtendrá una Excepción como el childAlreadyHasParent , y así, la única manera es poner el view
en un for loop
con el número de veces que desea que se infle, y este bucle debe contener el proceso de creación desde el inicio no sólo las líneas de inflado.
No estoy seguro de cuál es su punto de vista, pero tiene que crear manualmente a través de inflar el XML:
ArrayList<String> myList = getData(); for(String data : myList) { LinearLayout layout = new LinearLayout(this); layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); TextView textView = new TextView(this); textView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); textView.setText(data); layout.addChild(textView); parentPanel.addView(layout); }
Pero sí su claramente intentar algo que se ha hecho para usted con Simple ListView y API
Inflar varias veces no se puede hacer de la misma manera hacerlo en una sola toma. Espero que esto funcione
LayoutInflater inflator = (LayoutInflater).getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout parentPanel = findViewById(R.id.parent_pannel); ArrayList<String> myList = getData(); for(String data : myList) { // inflate child View item = inflator.inflate(R.layout.list_item, null); // initialize review UI TextView dataText = (TextView) item.findViewById(R.id.data); // set data dataText.setText(data); // add child parentPanel.addView(item); }
Esto funcionará, al menos me funcionó
- Errores que ejecutan el constructor 'Administrador de recursos de Android' en ADT
- ¿Cuál es el uso de List <NameValuePair> o ArrayList <NameValuePair>