当ArrayAdapter.isEnabled返回false时,ListView中的分隔符消失

sar*_*ric 33 user-interface android listview android-arrayadapter

ListActivity和我自己的ArrayAdapter班级一起使用.当我覆盖方法时ArrayAdapter.areAllItemsEnabled(),ArrayAdapter.isEnabled()列表视图中某些单元格之间的分隔符消失.有谁知道如何避免这种情况?即使对于残疾细胞,我也需要显示分频器.

Alo*_*rni 57

在areAllItemsEnabled()中返回true,在特定项目的isEnabled中返回false.禁用的项目不可点击,但您仍然可以查看分隔线

注意:这不适用于Android 5

  • 哇,那是一个严重的旗帜地狱.为什么他们认为我们不想要残疾人之间的分隔?似乎至少应该是一种选择.它应默认显示它们. (4认同)
  • 传说!一直在寻找一种方法来做这么久 (2认同)
  • @DanielWilson我现在的解决方法是将分隔符设置为null并将分隔符显式插入到适配器的数据集中(至少是虚拟的).它非常难看,因为你需要另一种视图类型,真实数据变化的索引等等.我相信这是源树中改变行为的变化:https://android.googlesource.com/platform/frameworks/base/+/20cc605b69a017316112929666255226c184a376%5E!/#F0 (2认同)

小智 14

您实际上可以通过为其任何一个元素提供以下属性来禁用列表项.

android:focusable="true"
android:clickable="true"
Run Code Online (Sandbox Code Playgroud)

因此,以下列表项布局将不可单击,但将显示分隔符,而无需实现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>
Run Code Online (Sandbox Code Playgroud)

这可能有助于在Android 5.0中原始答案似乎不再起作用.