#android #android-layout #android-listview
#Android #android-layout #android-listview
Вопрос:
У меня есть ListView с пользовательским представлением, отображаемым адаптером. Он содержит изображение, некоторый текст и другой ListView. В методе getView адаптера я создаю другой адаптер для настройки встроенного ListView.
Все это работает нормально, но по какой-то причине высоты встроенного ListView достаточно только для просмотра одного элемента списка. Если я вручную установлю высоту в пикселях, я смогу увидеть больше элементов в списке. Для всех высот установлено значение wrap_content, поэтому я не уверен, почему это не работает.
Мой первый ListView выглядит так:
<ListView
android:id="@ id/newswire"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:cacheColorHint="#ffffff"
/>
Элемент, который отображается для этого ListView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
>
<ImageView
android:id="@ id/aggSparkAvatar"
android:layout_width="45dp"
android:layout_height="45dp"
android:scaleType="centerCrop"
/>
<LinearLayout
android:orientation="vertical"
android:paddingLeft="10dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@ id/aggSparkName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#1B5F7C"
android:textStyle="bold"
/>
<TextView
android:id="@ id/aggSparkDateStamp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textStyle="bold"
/>
<View
android:layout_height="1dp"
android:layout_width="fill_parent"
android:background="#F2F2F2"
/>
<ListView
android:id="@ id/aggSparkList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:cacheColorHint="#ffffff"
/>
</LinearLayout>
</LinearLayout>
Тогда для встроенного ListView каждый элемент выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
>
<ImageView
android:id="@ id/sparkAvatar"
android:layout_width="45dp"
android:layout_height="45dp"
android:scaleType="centerCrop"
/>
<LinearLayout
android:orientation="vertical"
android:paddingLeft="10dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@ id/sparkTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textStyle="bold"
/>
<TextView
android:id="@ id/sparkText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
/>
<TextView
android:id="@ id/sparkDateStamp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#A2A2A2"
/>
</LinearLayout>
</LinearLayout>
Ответ №1:
никогда не рекомендуется включать прокручиваемые представления внутри другого прокручиваемого представления. вам следует подумать о перепроектировании вашего приложения.
в вашем случае для встраиваемого вами ListView установлено значение wrap_content, wrap_content
— также не рекомендуется. ListView предназначен для отображения списка элементов, которые в совокупности будут слишком большими для одновременного отображения на экране. использование wrap_content, wrap_content
не имеет особого смысла.
Комментарии:
1. Спасибо, я использовал только встроенный ListView, поскольку у меня есть другое действие, которое просто использует это представление, поэтому я подумал, что просто использую его повторно. Ваше право, в этом случае я должен просто использовать пару линейных макетов, поскольку я хочу показать только 2 элемента для встроенного ListView.