`

LISTVIEW的单选和多选

阅读更多
使用LISTVIEW会遇到单选和多选的情况:

前提:LISTVIEW和ADAPTER(建议用自己写的,方便控制)

一.单选


    /** ADAPTER部分 */
    private int selectedIndex = -1; //定义一个标记

    //适合单选
    public void setSelectedIndex(int ind) {
        selectedIndex = ind;
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
     ............
     if (selectedIndex == position) {
       flag.setVisibility(View.VISIBLE);
     } else {
       flag.setVisibility(View.INVISIBLE);
     }

     .........
    }

    /** ACTIVITY 或 Fragment */
    adapter.setSelectedIndex(position);
    adapter.notifyDataSetChanged(); 
     



二.多选

填充数据的时候,数组初始化,并调用父类刷新
选中数据的时候,将KEY-VALUE放进数组,再调用父类刷新


    /** ADAPTER部分 */
    private SparseArray<Integer> sparseArray;//定义一个数组

    /**
     * 重写:用于列表更新
     * 这样就可以清理掉已选的标签
     */
    @Override
    public void notifyDataSetChanged() {
        this.sparseArray = new SparseArray<Integer>();
        super.notifyDataSetChanged();
    }

    /**
     * 适合多选
     * 调用父类的notifyDataSetChanged 去处理显示
     *
     * @param position
     */
    public void setMultiSelected(int position) {
        if (sparseArray.get(position) != null) { //在里面 清理
            sparseArray.delete(position);
        } else {
            sparseArray.append(position, position);
        }
        super.notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
     ............
     if (sparseArray.get(houseInfo.houseId) != null) {
           flag.setVisibility(View.VISIBLE);
     }
     else {
           flag.setVisibility(View.INVISIBLE);
     }
     ..........
     }

     /** ACTIVITY 或 Fragment */
     
     //数据刷新什么的使用
     adapter.notifyDataSetChanged(); 

     //选中什么的使用
     adapter.setMultiSelected(houseInfo.houseId);


    另外的一种办法: 使用一个MAP存放选中的内容,然后获取flag再标记,这样会出现一个问题,软键盘的消失会重新绘制ADAPTER,导致选中的丢失,故多选的办法我觉得要好点

xxxxListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

    Object object= (object) adapterView.getAdapter().getItem(position);
    View flag = view.findViewById(R.id.flag);
     if (checkMap.get(object.id) != null) {
         flag.setVisibility(View.INVISIBLE);
         checkMap.remove(object.id);
      } else {
          flag.setVisibility(View.VISIBLE);
          checkMap.append(object.id, object);
       }
      }
});



分享到:
评论

相关推荐

    (Android)五分钟让你轻松学会ListView单选和多选功能

    本教程将深入讲解如何在ListView中实现单选和多选功能,让你在短短的五分钟内掌握这一关键技能。 首先,我们要理解ListView的基本结构。ListView是由多个View(称为Item视图)组成的,每个Item视图通常对应数据集中...

    完美解决ListView单选和多选的问题

    本文将详细介绍如何在Android中实现ListView的单选和多选。 ### 1. 单选功能实现 单选通常适用于只有一个选项可以被选中的场景。在Android中,我们可以使用RadioGroup配合RadioButton来实现。以下步骤概述了实现...

    ListView实现单选多选

    本示例主要讲解如何在ListView中实现单选和多选功能。这在很多应用场景中非常常见,例如在设置菜单、联系人选择等场景。 首先,我们需要理解ListView的基本工作原理。ListView通过Adapter将数据与视图进行绑定,...

    ListView中使用单选和多选效果

    本篇文章将详细讲解如何在ListView中实现单选和多选效果。 首先,我们需要了解ListView的基本结构。ListView通常与Adapter结合使用,Adapter负责将数据转化为ListView可显示的View。在单选和多选场景下,我们可能...

    androidstudio最新版 实现ListView单选、多选效果最实用案例 亲试可用

    ListView中有一个属性:android:...* singleChoice 单选 * multipleChoice 多选 * none 默认情况,没有选中效果 在ListView的布局中设置了android:choiceMode属性后,item布局需要实现checkable,才有选中效果。

    ListView单选或多选

    在许多应用场景中,我们可能需要实现ListView的单选或多选功能,比如在设置菜单中选择一项或多项服务。实现这一功能的关键在于适当地处理点击事件以及状态管理。 在Android中,ListView通常与Adapter一起使用,...

    listview_单选多选

    在这个"listview_单选多选"的主题中,我们将深入探讨ListView如何实现单选、多选功能,以及相关的编程实践。 首先,ListView的选择器通常是一个颜色、图像或者形状的组合,通过`android:background`属性设置在...

    ListView的单选和多选

    本教程将详细讲解如何在ListView中实现单选和多选功能,并指出其与GridView控件的相似之处。 ### 1. ListView的基本结构与工作原理 ListView的核心是Adapter,它负责将数据源(如ArrayList)与视图(View)进行...

    Node.js-ListView列表单级单选单级多选多级单选多级多选效果展示

    本教程将详细讲解如何实现ListView的单级单选、单级多选以及多级单选和多级多选的效果。 1. **单级单选**: 在ListView中实现单级单选,通常使用CheckedTextView或者自定义View,配合OnItemClickListener监听器来...

    ListView实现单选多选.zip

    本压缩包文件"ListView实现单选多选.zip"显然关注的是如何在ListView中实现单选和多选功能,这对于创建具有交互性的应用是非常重要的。下面将详细讲解实现这一功能所需的知识点。 1. **ListView的基本概念**: - ...

    Android三级目录、ListView单选/GridView单选、ListView多选/GridView多选

    1. **ListView单选**:通常可以使用RadioGroup和RadioButton结合Adapter来实现。每个ListView项对应一个RadioButton,RadioGroup用于管理所有RadioButton,确保每次只有一个被选中。在getView()方法中,设置点击事件...

    listview中的单选按钮多选按钮

    在ListView中集成单选按钮(RadioButton)和多选按钮(CheckBox)是常见的需求,例如在创建选择列表、设置菜单等场景。本篇文章将深入探讨如何在ListView中实现单选与多选功能,并解决复用问题。 首先,我们需要...

    自定义Dialog里listview的单选、多选

    本文将详细讲解如何在自定义Dialog中实现ListView的单选和多选功能。 首先,我们需要创建一个自定义Dialog。这通常通过继承`AlertDialog.Builder`或直接使用`DialogFragment`来实现。在`AlertDialog.Builder`中,...

    listview多选与单选模式demo

    一、ListView单选模式 1. 单选模式通常用于用户只能选择一个选项的情况,例如在下拉菜单或设置界面中。在ListView中实现单选,我们可以使用RadioGroup和RadioButton的组合,或者自定义一个Adapter。 2. RadioGroup...

    FlowTag-Android流式布局,支持点击、单选、多选,支持初始化选中标签(只针对单选和多选模式),适合用于产品标签等,用法采用Adapter模式,和ListView、G.zip

    Android流式布局,支持点击、单选、多选等,适合用于产品标签等,用法采用Adapter模式,和ListView、GridView用法一样!2016/6/26号新添加初始化标签功能,使用非常简单,只要你的Adapter实现OnInitSelectedPosition...

    ListView多选单选模式

    在开发过程中,我们经常需要实现ListView的多选和单选模式,以便用户能够交互性地选择列表中的项目。下面将详细介绍如何在Android中设置ListView的多选和单选模式。 1. 单选模式(Radio Button) 在ListView中实现...

    Listview checkbox 单选,多选,删除,单击选择,显示选择结果

    在这个特定的场景中,我们关注的是如何将CheckBox集成到ListView中,实现多种交互模式,如单选、多选、全选、取消全选以及删除功能,并能实时显示选择结果。 1. **ListView与CheckBox的结合**: 在自定义ListView...

    android 单选、多选、侧滑目录等

    在实际应用中,我们经常需要在ListView中实现单选、多选以及侧滑菜单等交互功能,以提高用户体验。下面将详细讲解这些知识点。 一、单选与多选 1. 单选:在ListView中实现单选通常使用RadioGroup配合RadioButton。...

    实现listview 单选 多选 反选 全选功能

    实现ListView的单选、多选、反选以及全选功能是常见的需求,尤其是在需要用户进行多项选择的场景下。下面将详细介绍如何实现这些功能。 首先,我们需要一个适配器(Adapter)来填充ListView的数据。适配器通常继承...

Global site tag (gtag.js) - Google Analytics