Mam układ do widoku -
<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>
To, co chcę robić, to moja główna działalność z takim układem
<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>
Chcę przejrzeć mój model danych i wstawić wiele widoków składających się z pierwszego układu do głównego układu. Wiem, że mogę to zrobić, budując kontrolki całkowicie w kodzie, ale zastanawiałem się, czy istnieje sposób na dynamiczne budowanie widoków, aby móc dalej używać układu zamiast umieszczać wszystko w kodzie.
Odpowiedzi:
Użyj,
LayoutInflater
aby utworzyć widok na podstawie szablonu układu, a następnie wstaw go do widoku, w którym jest potrzebny.Konieczne może być dostosowanie indeksu, w którym chcesz wstawić widok.
Dodatkowo ustaw LayoutParams zgodnie z tym, jak chcesz, aby pasował do widoku nadrzędnego. np. z
FILL_PARENT
, lubMATCH_PARENT
itp.źródło
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
z działania, aby zachować motyw działania, którego nie otrzymasz w inny sposób.Zobacz
LayoutInflater
klasę.źródło
Wygląda na to, że naprawdę chcesz, aby ListView z niestandardowym adapterem nadmuchał określony układ. Używając ArrayAdapter i metody
notifyDataSetChanged()
, masz pełną kontrolę nad generowaniem i renderowaniem widoków.Spójrz na te samouczki
źródło
Aby odpowiedź @Marka Fishera była jaśniejsza, wstawiany widok, który jest zawyżany, powinien być plikiem xml w folderze układu, ale bez układu (ViewGroup), takiego jak LinearLayout itp. W środku. Mój przykład:
res / layout / my_view.xml
Następnie punkt wstawiania powinien mieć układ podobny do LinearLayout:
res / layout / activity_main.xml
Wtedy powinien być kod
Powodem, dla którego publikuję tę bardzo podobną odpowiedź, jest to, że kiedy próbowałem wdrożyć rozwiązanie Marka, utknąłem w tym, jakiego pliku xml powinienem użyć dla insert_point i widoku potomnego. Najpierw użyłem układu w widoku dziecka i całkowicie nie działał, co zajęło mi kilka godzin. Mam więc nadzieję, że moja eksploracja pozwoli zaoszczędzić czas innym.
źródło
źródło