Ich habe ein Layout für eine Ansicht -
<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>
Was ich tun möchte, ist in meiner Haupttätigkeit mit einem Layout wie diesem
<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>
Ich möchte mein Datenmodell durchlaufen und mehrere Ansichten, die aus dem ersten Layout bestehen, in das Hauptlayout einfügen. Ich weiß, dass ich dies tun kann, indem ich die Steuerelemente vollständig im Code erstelle, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, die Ansichten dynamisch zu erstellen, damit ich weiterhin ein Layout verwenden kann, anstatt alles in Code einzufügen.
Antworten:
Verwenden Sie die Option
LayoutInflater
, um eine Ansicht basierend auf Ihrer Layoutvorlage zu erstellen, und fügen Sie sie dann in die Ansicht ein, in der Sie sie benötigen.Möglicherweise müssen Sie den Index anpassen, in den Sie die Ansicht einfügen möchten.
Stellen Sie außerdem die LayoutParams so ein, wie sie in die übergeordnete Ansicht passen sollen. zB mit
FILL_PARENT
oderMATCH_PARENT
usw.quelle
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
Sie diese Option aus einer Aktivität, um das Aktivitätsthema beizubehalten, das Sie sonst nicht erhalten.Siehe die
LayoutInflater
Klasse.quelle
Es sieht so aus, als ob Sie wirklich eine ListView mit einem benutzerdefinierten Adapter benötigen, um das angegebene Layout aufzublasen. Mit einem ArrayAdapter und der Methode haben
notifyDataSetChanged()
Sie die volle Kontrolle über die Generierung und das Rendern von Ansichten.Schauen Sie sich diese Tutorials an
quelle
Um die Antwort von @Mark Fisher klarer zu machen, sollte die eingeblasene Ansicht, die aufgeblasen wird, eine XML-Datei unter dem Layoutordner sein, jedoch ohne ein Layout (ViewGroup) wie LinearLayout usw. im Inneren. Mein Beispiel:
res / layout / my_view.xml
Dann sollte die Einfügemarke ein Layout wie LinearLayout sein:
res / layout / activity_main.xml
Dann sollte der Code sein
Der Grund, warum ich diese sehr ähnliche Antwort poste, ist, dass ich beim Versuch, Marks Lösung zu implementieren, nicht sicher war, welche XML-Datei ich für insert_point und die untergeordnete Ansicht verwenden soll. Ich habe zuerst das Layout in der untergeordneten Ansicht verwendet und es hat überhaupt nicht funktioniert, was mich mehrere Stunden gekostet hat, um es herauszufinden. Ich hoffe, meine Erkundung kann anderen Zeit sparen.
quelle
quelle