Исчезающий разделитель в 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) должен сделать определенные строки не выбираемыми с делителем, показывающим просто отлично.


использовать setDivider(Drawable divider) метод listview


у меня была такая же проблема на 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"
    />