У меня есть макет для просмотра -
<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>
То, что я хочу сделать, это в моей основной деятельности с макетом, как это
<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>
Я хочу пройтись по моей модели данных и добавить несколько представлений, состоящих из первого макета, в основной макет. Я знаю, что могу сделать это, полностью построив элементы управления в коде, но мне было интересно, есть ли способ динамически создавать представления, чтобы я мог продолжать использовать макет вместо того, чтобы помещать все в код.
android
dynamic
view
android-layout
мистифицировать
источник
источник
Ответы:
Используйте
LayoutInflater
для создания представления на основе вашего шаблона макета, а затем вставьте его в представление, где оно вам нужно.Возможно, вам придется настроить индекс, где вы хотите вставить представление.
Кроме того, установите LayoutParams в соответствии с тем, как вы хотите, чтобы он вписывался в родительское представление. например, с помощью
FILL_PARENT
илиMATCH_PARENT
, и т. д.источник
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
из действия, чтобы сохранить тему действия, которую вы не получите иначе.Смотрите
LayoutInflater
класс.источник
Похоже, что вы действительно хотите ListView с пользовательским адаптером, чтобы надуть указанный макет. Используя ArrayAdapter и метод,
notifyDataSetChanged()
вы получаете полный контроль над генерацией и рендерингом Views.Взгляните на эти уроки
источник
Чтобы сделать ответ @Mark Fisher более понятным, вставляемый вид должен быть раздувным xml-файлом в папке макета, но без макета (ViewGroup), такого как LinearLayout и т. Д. Внутри. Мой пример:
разреш / макет / my_view.xml
Тогда точка вставки должна быть такой, как LinearLayout:
разреш / макет / activity_main.xml
Тогда код должен быть
Причина, по которой я публикую этот очень похожий ответ, заключается в том, что когда я пытался реализовать решение Марка, я застрял на том, какой XML-файл я должен использовать для insert_point и дочернего представления. Сначала я использовал макет в детском представлении, и он полностью не работал, что потребовало несколько часов, чтобы понять. Поэтому надеюсь, что мое исследование может сэкономить время других.
источник
источник