Tengo un diseño para una vista.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_header"
style="@style/Home.ListHeader" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_none"
android:visibility="gone"
style="@style/TextBlock"
android:paddingLeft="6px" />
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_list" />
</LinearLayout>
Lo que quiero hacer es en mi actividad principal con un diseño como este
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:id="@+id/item_wrapper">
</LinearLayout>
Quiero recorrer mi modelo de datos e inyectar múltiples vistas que consisten en el primer diseño en el diseño principal. Sé que puedo hacer esto construyendo los controles completamente dentro del código, pero me preguntaba si había una manera de construir dinámicamente las vistas para poder continuar usando un diseño en lugar de poner todo en el código.
Respuestas:
Use
LayoutInflater
para crear una vista basada en su plantilla de diseño y luego inyéctela en la vista donde la necesite.Puede que tenga que ajustar el índice donde desea insertar la vista.
Además, establezca los LayoutParams de acuerdo con la forma en que desea que se ajuste a la vista principal. por ejemplo con
FILL_PARENT
, oMATCH_PARENT
, etc.fuente
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
de una actividad para preservar el tema de actividad que de otro modo no obtendrá.Ver la
LayoutInflater
clasefuente
Parece lo que realmente quiere un ListView con un adaptador personalizado para inflar el diseño especificado. Usando un ArrayAdapter y el método
notifyDataSetChanged()
usted tiene control total de la generación y representación de Vistas.Echa un vistazo a estos tutoriales
fuente
Para que la respuesta de @Mark Fisher sea más clara, la vista insertada que se está inflando debe ser un archivo xml debajo de la carpeta de diseño pero sin un diseño (ViewGroup) como LinearLayout, etc. Mi ejemplo:
res / layout / my_view.xml
Luego, el punto de inserción debe ser un diseño como LinearLayout:
res / layout / activity_main.xml
Entonces el código debería ser
La razón por la que publico esta respuesta muy similar es que cuando traté de implementar la solución de Mark, me quedé atascado en qué archivo xml debería usar para insert_point y la vista secundaria. En primer lugar, utilicé el diseño en la vista infantil y no funcionaba por completo, lo que me llevó varias horas descubrir. Así que espero que mi exploración pueda ahorrarle tiempo a otros.
fuente
fuente