161 votes

Android - Ajouter Dynamiquement des points de Vue en Vue

J'ai une mise en page pour un affichage

<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, c'est mon activité principale, avec une mise en page comme ceci

<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 veux faire une boucle par mon modèle de données et de les injecter plusieurs vues composé de la première mise en page dans la page principale. Je sais que je peux le faire que par le renforcement des contrôles complètement dans le code, mais je me demandais si il y avait un moyen de créer dynamiquement les points de vue afin que je puisse continuer à utiliser une mise en page au lieu de tout mettre dans le code.

250voto

Mark Fisher Points 2575

Utiliser l' LayoutInflator pour créer un affichage basé sur votre modèle de mise en page, et puis à l'injecter dans la vue où vous en avez besoin.

LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.your_layout, null);

// fill in any details dynamically here
TextView textView = (TextView) v.findViewById(R.id.a_text_view);
textView.setText("your text");

// insert into main view
View insertPoint = findViewById(R.id.insert_point);
((ViewGroup) insertPoint).addView(v, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));

Vous pourriez avoir à ajuster l'indice de l'endroit où vous souhaitez insérer la vue.

39voto

Gabriel Negut Points 6081

Voir l' LayoutInflater classe.

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup parent = (ViewGroup)findViewById(R.id.where_you_want_to_insert);
inflater.inflate(R.layout.the_child_view, parent);

20voto

Aleadam Points 25433

Il ressemble à ce que vous voulez vraiment un ListView avec une coutume adaptateur pour gonfler le modèle spécifique. À l'aide d'un ArrayAdapter et la méthode de notifyDataSetChanged() vous avez le plein contrôle de la Vue sur la génération et le rendu.

Jetez un oeil à ces tutoriels

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X