J'ai une mise en page pour une vue -
<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>
Ce que je veux faire, c'est dans mon activité principale avec une mise en page comme celle-ci
<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>
Je souhaite parcourir mon modèle de données et injecter plusieurs vues constituées de la première mise en page dans la mise en page principale. Je sais que je peux le faire en construisant les contrôles complètement dans le code, mais je me demandais s'il y avait un moyen de créer dynamiquement les vues afin que je puisse continuer à utiliser une mise en page au lieu de tout mettre dans le code.
Réponses:
Utilisez le
LayoutInflater
pour créer une vue basée sur votre modèle de disposition, puis injectez-la dans la vue là où vous en avez besoin.Vous devrez peut-être ajuster l'index à l'endroit où vous souhaitez insérer la vue.
En outre, définissez les LayoutParams en fonction de la manière dont vous souhaitez qu'ils tiennent dans la vue parent. par exemple avec
FILL_PARENT
, ouMATCH_PARENT
, etc.la source
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
partir d'une activité pour préserver le thème de l'activité que vous n'obtiendrez pas autrement.Voir la
LayoutInflater
classe.la source
Cela ressemble à ce que vous voulez vraiment un ListView avec un adaptateur personnalisé pour gonfler la disposition spécifiée. À l'aide d'un ArrayAdapter et de la méthode,
notifyDataSetChanged()
vous avez un contrôle total sur la génération et le rendu des vues.Jetez un œil à ces tutoriels
la source
Pour rendre la réponse de @Mark Fisher plus claire, la vue insérée gonflée doit être un fichier xml sous le dossier de mise en page mais sans mise en page (ViewGroup) comme LinearLayout, etc. à l'intérieur. Mon exemple:
res / layout / my_view.xml
Ensuite, le point d'insertion doit être une disposition comme LinearLayout:
res / layout / activity_main.xml
Ensuite, le code devrait être
La raison pour laquelle je poste cette réponse très similaire est que lorsque j'ai essayé d'implémenter la solution de Mark, je suis resté coincé sur le fichier xml dois-je utiliser pour insert_point et la vue enfant. J'ai d'abord utilisé la mise en page dans la vue enfant et cela ne fonctionnait absolument pas, ce qui m'a pris plusieurs heures à comprendre. J'espère donc que mon exploration pourra faire gagner du temps aux autres.
la source
la source