【问题标题】:Highlight Multiple Selected/Checked/Activated in ListView在 ListView 中突出显示多个选中/选中/激活
【发布时间】:2014-08-05 23:25:57
【问题描述】:

哇,当涉及到列表项选择时,文档太可怕了。我所需要的只是能够选择并突出显示列表中的多个项目。我浏览了网络并看到了对android:choiceMode="multipleChoice" 的引用,我猜它允许您选择多个项目。但是我在哪里可以得到我的活动中的选定项目?为什么当我尝试使用setSelection(position) 选择多个项目时,之前突出显示的项目消失了?

Google 还在 View.setActivated(boolean) 中描述了这一点

请注意,激活与选择不同。选择是一个瞬态属性,表示用户当前正在与之交互的视图(层次结构)。激活是用户可以将视图移入和移出的长期状态。例如,在启用单选或多选的列表视图中,当前选择集中的视图被激活。 (嗯,是的,我们对这里的术语深表歉意。)

那么我应该使用激活而不是选择吗? This SO answer 谈到“已激活”只是“已检查”的后 HoneyComb 版本。但是,如果您应该使用“激活”进行多选,那么android:choiceMode="multipleChoice" 首先有什么意义?

【问题讨论】:

    标签: java android


    【解决方案1】:

    所以显然我被带错了轨道,因为我应该寻找突出显示“已检查”项目而不是“选定”项目。因此,许多答案告诉我将selector 与我的ListView 布局一起使用android:listSelector="@drawable/myselector,但我真正需要的是在我的行布局中使用selector。解决方法其实很简单,我贴在下面:

    drawable/rowbackgroundselector.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_activated="true"
        android:drawable="@android:color/holo_green_light"/>
    </selector>
    
    • 注意您如何使用“state_activated”来检测项目是否“已选中”...

    drawable/mylistrow.xml

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:background="@drawable/rowbackgroundselector"
        android:padding="10sp"
    />
    
    • 使用选择器作为行背景

    MainActivity.onListItemClick()

    public void onListItemClick(ListView l, View v, int position, long id) {
        getListView().setItemChecked(pos, true);
    }
    

    最后,确保您的适配器使用您的自定义行布局

    mAdapter = new ArrayAdapter<FileTag>(this.getActivity(),
        R.layout.mylistrow, mList);
    

    【讨论】:

    • 我知道这是疯了,但我刚刚找到它,它解决了我已经研究了两天的问题(业余)。我想补充一点,您仍然必须使用 (your_listview_name).setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)。这可以在 listItemClick() 或 setOnItemLongClickListener 中。我有一个类似的问题,使用这个答案,我找到了解决方案。谢谢!这是我的参考答案:stackoverflow.com/a/66287947/5374362
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 2012-12-11
    • 2012-03-30
    • 2016-07-31
    • 2015-09-23
    • 2021-01-05
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多