Исчезающий разделитель в ListView при ArrayAdapter.значение возвращает false
Я использую ListActivity
своими ArrayAdapter
класса. Когда я переопределяю методы ArrayAdapter.areAllItemsEnabled()
и ArrayAdapter.isEnabled()
разделитель между некоторыми ячейками в представлении списка исчезает. Кто-нибудь знает как избежать этого? Мне нужны разделители, чтобы отображать даже для отключенных ячеек.
10 ответов
возвращает true в areAllItemsEnabled () и false в isEnabled для определенного элемента. Отключенный элемент не будет кликабельным, но вы все равно сможете просматривать разделительные линии
Примечание: это не работает для Android 5
вы можете по существу отключить элемент списка, предоставив любому из его элементов следующие свойства.
android:focusable="true"
android:clickable="true"
таким образом, следующий макет элемента списка не будет кликабельным, но покажет разделители, без необходимости реализации areAllItemsEnabled()
или isEnabled(int position)
.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:clickable="true">
<TextView
android:text="Large Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
это может помочь в Android 5.0, где оригинальный ответ больше не работает.
это работает для меня. Это покажет разделитель,а также отключит элемент списка щелчка. Даже в Android 5.0.
установите это в списке
android:focusable="true"
android:clickable="false"
установка только кликабельного "false" не сработала для меня. И переопределение isEnabled () вызвало вышеупомянутую проблему скрытия разделителя в 5.0.
и мой ListView выглядит так.
<ListView
android:id="@+id/lvItems"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/Gray"
android:dividerHeight="1px">
</ListView>
нет android:listSelector="@android:color/transparent"
нужен здесь
все вышеперечисленные решения имеют проблему с совместимостью (хорошо работает на одной версии Android, но не работает на другой) - особенно если вы хотите использовать прозрачность. Единственное действительно надежное решение-использовать девять-патч.
вы можете скачать с: http://ge.tt/517ZIFC2/v/1?c
просто поместите выбранный png в drawable-nodpi
каталог, чтобы избежать повторной выборки.
и используйте его в своем адаптере:
convertView.setBackgroundResource(R.drawable.border_b1px_black);
вам нужно будет включить строки в методе isEnabled () для Android 5.0 и выше.
но вы все равно можете отключить строки иначе:
в следующем примере я отключаю каждую строку, кроме строки 0:
в своем getView адаптера метод для вашего адаптера:
if (position > 0) {
convertView.setClickable(true);
}
по какой-то причине установка clickable в true отключает строку. Не знаю почему. Сначала я предполагал, что это сделает его кликабельным, но это нет.
ссылки: Android ListView дочерний вид setEnabled () и setClickable () ничего не делать
посмотреть user622689 ответа.
вместо isEnabled
, на ListView
, set android:listSelector="@android:color/transparent"
а также android:focusable="true"
и
android:clickable="true"
. Это дает тот же эффект
Я могу проверить, что при areAllItemsEnabled()
возвращает false, а затем для каждой конкретной строки, которую вы хотите установить как не выбираемую через isEnabled(int position)
разделитель строк (делитель) исчезает. Настройка areAllItemsEnabled()
чтобы всегда возвращать true и играть только с isEnabled(int position)
должен сделать определенные строки не выбираемыми с делителем, показывающим просто отлично.
у меня была такая же проблема на Lollipop. Обходным путем для меня было изменение фона в listview на прозрачный. В моем случае мне не хватало разделителей на навигационном ящике на строках, где isEnabled
возвращает false, когда я устанавливаю фон в цвет. Попробуйте что-то вроде:
android:background="@android:color/transparent"
У меня была похожая проблема. Я решил это, явно установив высоту делителя представления списка как "1dp"
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="1dp"
/>