为什么我的 ListView 和 CheckBox id 变得混乱?

2023-12-09

我正在女巫单元中实现带有复选框的 ListView 。但问题是,当我签入一个单元格并向下滚动列表时,它会变得混乱,其他单元格也会被检查。我需要在 getView 方法中做其他事情吗?

这是我的 CustonAdapter:

public class AcessoriosItemAdapter extends BaseAdapter {

ArrayList<AcessoriosItensLista> listAcessorios = new ArrayList<AcessoriosItensLista>();
Context context;    

public AcessoriosItemAdapter(Context context) {
    this.context = context;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return listAcessorios.size();
}

@Override
public Object getItem(int index) {
    // TODO Auto-generated method stub
    return listAcessorios.get(index);
}

@Override
public long getItemId(int index) {
    // TODO Auto-generated method stub
    return index;
}

@Override
public View getView(final int index, View view, ViewGroup parent) {

    if (view == null) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        view = inflater.inflate(R.layout.linha_acessorios, parent, false);             
    }       

    AcessoriosItensLista acessorios = (AcessoriosItensLista)getItem(index);

    ImageView imgAcessorio = (ImageView)view.findViewById(R.id.imgAcessorioLista);

    String nomeImagem = acessorios.getNomeImagens();
    int id = context.getResources().getIdentifier(nomeImagem, "drawable", context.getPackageName());
    imgAcessorio.setBackgroundResource(id); 

    TextView tvNome = (TextView) view.findViewById(R.id.tvNomeAcessoriosLinha);
    tvNome.setText(acessorios.getNomeAcessorio());      

    CheckBox cb = (CheckBox)view.findViewById(R.id.cbListaAcessorios);


    return view;
}   


public void addDadosAcessorios(String nomeAcessorio, String nomeImagens, boolean checked) {

    listAcessorios.add(new AcessoriosItensLista(nomeAcessorio, nomeImagens, checked));

}

}


这种行为的原因是因为listview回收列表项视图。由于您没有重置中的选中状态getView()当您滚动并且项目被回收时,状态会被维持。

需要的是一种根据每个复选框的位置来跟踪其状态的方法。所以你可以自信地告诉:复选框位于位置k是检查还是不检查!

您需要跟踪已单击的复选框,以便何时getView()被调用时,您可以更新状态checkbox.

1)维持一个list已选中的复选框位置。

2) 如果单击并选中复选框,则将其位置添加到list。如果再次单击(未选中),请将其从列表中删除。

3)使用这个list并更新复选框的选中状态getView()

Code:

public class AcessoriosItemAdapter extends BaseAdapter {

    ArrayList<AcessoriosItensLista> listAcessorios = new ArrayList<AcessoriosItensLista>(); 
    Context context;    

    // store a list of position where checbox is selected.
    ArrayList<Integer> checkedPositions = new ArrayList<Integer>();
    ...
    ...

    @Override
    public View getView(final int index, View view, ViewGroup parent) {

        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            view = inflater.inflate(R.layout.linha_acessorios, parent, false);             
        }       

        AcessoriosItensLista acessorios = (AcessoriosItensLista)getItem(index);

        ImageView imgAcessorio = (ImageView)view.findViewById(R.id.imgAcessorioLista);

        String nomeImagem = acessorios.getNomeImagens();
        int id = context.getResources().getIdentifier(nomeImagem, "drawable", context.getPackageName());
        imgAcessorio.setBackgroundResource(id); 

        TextView tvNome = (TextView) view.findViewById(R.id.tvNomeAcessoriosLinha);
        tvNome.setText(acessorios.getNomeAcessorio());      

        CheckBox cb = (CheckBox)view.findViewById(R.id.cbListaAcessorios);
        final Integer position = new Integer(index);

        // when checkbox is clicked, we add/remove its position to/from the list
        cb.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                if (((CheckBox) v).isChecked()) {
                    // if checked, we add it to the list
                    checkedPositions.add(position);
                }
                else if(checkedPositions.contains(position)) {
                    // else if remove it from the list (if it is present)
                    checkedPositions.remove(position);
                }

            }
        });
        // set the state of the checbox based on if it is checked or not.
        cb.setChecked(checkedPositions.contains(position));

        return view;
    }   

    ...
    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 ListView 和 CheckBox id 变得混乱? 的相关文章

  • 单击应用程序的启动图标时会发生什么?

    单击应用程序的启动图标时会发生什么 是否总是发送新意图 或者结果有时与从最近的任务恢复任务相同 如果发送意图 它何时被发送到新活动实例的 onCreate 方法以及何时通过现有活动的 onNewIntent 进行路由 假设意图通过任务中现有
  • 如何在 Android 中的 onCreate() 内部创建方法

    如何在里面创建一个方法onCreate 方法 当我创建它的显示错误时 令牌 void 预期存在语法错误 并且如果无法在内部创建方法onCreate 方法比请告诉我如何在外部创建方法onCreate 并通过mContext and mActi
  • 视图绑定对应用程序大小的影响有多大?

    View Binding 按照文档的规定 为每个XML元素生成一个Binding类 以方便访问和检查 并减轻如下的时间负担 findViewById 虽然findViewById通过更昂贵的关联搜索进行操作 由于映射 绑定应该 直接 访问
  • 使用AndroidKeyStore身份验证的无限循环

    当我使用需要用户身份验证才能使用密钥的 AndroidKeyStore 时 我的应用程序进入无限循环 setUserAuthenticationRequired true setUserAuthenticationValidityDurat
  • 如何以编程方式在 Android 中查找平板电脑或手机?

    我的情况是 手机和平板电脑的逻辑是相同的 但布局上略有不同 我尝试使用以下代码 public static boolean findoutDeviceType Context context return context getResour
  • Android,如何限制TextView的宽度(并在文本末尾添加三个点)?

    我有一个TextView我想限制它的字符 实际上 我可以做到这一点 但我正在寻找的是如何在字符串末尾添加三个点 这表明文本已经继续 这是我的 XML 但没有点 尽管它限制了我的文本
  • 请求超级用户权限编辑文件

    我正在规划一个需要编辑系统文件的应用程序 我只能使用 root 权限编辑该文件 我有一个已 root 且安装了 Superuser apk 的开发手机 其他需要 root 的应用程序会在首次启动时请求 root 访问权限 我想做同样的事情
  • 如何在默认浏览器或webview中打开按钮点击url

    我怎样才能打开一个网址webview或者点击按钮后在默认浏览器中 目前 当我单击btn1按钮 它提示我从手机中选择一个浏览器 我想在默认浏览器或其他浏览器中打开此网址webview 这是我的java代码 public class myact
  • AdMob 插页式广告仅显示一次

    当广告在一个会话内第二次或第三次打开时 LogCat 会显示错误消息 尝试使用不同的广告管理器启动新的 AdActivity 我通过应用程序主屏幕的 on resume 方法中的意图启动插页式广告 Override public void
  • 如何使用 Android 处理在 Google Cardboard 设备中显示立体图像?

    处理的目的是使使用 Java 绘图变得更加容易 Android 的处理功能具有桌面版的强大功能以及来自传感器的信息 将这些东西放在一起 显示立体图像并像 Oculus Rift 或 Google Cardboard 一样在其周围移动不是很容
  • 方向改变时的类转换异常 (Android)

    我有一个由选项卡活动托管的活动 当我更改屏幕方向时 我的应用程序崩溃了 02 14 21 01 35 825 E AndroidRuntime 9424 java lang RuntimeException Unable to start
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • 在哪里可以获得用于导入 libcore.io 的 JAR?

    我想处理一个GaiException在我的应用程序中 调试器告诉我 它位于 libcore io 包中 但导入它会产生错误 我想我需要向我的项目添加一个额外的 JAR 才能正确解析此类型 我在我的 android sdk 文件夹中进行了一些
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 停止前台运行的服务的正确方法是什么

    我正在尝试停止作为前台服务运行的服务 当前的问题是当我打电话时stopService 通知仍然保留 因此 在我的解决方案中 我添加了一个接收器 我正在将其注册到onCreate 在 的里面onReceive 我调用的方法stopforegr
  • 查找配对的 Android 蓝牙设备是否在范围内的正确方法?

    我想编写一个充当蓝牙客户端的应用程序 我想做的是找出最好的方法来确定我支持的特定设备是否在范围内 而不是一直尝试在其上执行 BluetoothDevice connect 并失败如果不在范围内 这里我们假设设备已经配对 恐怕在特定设备处于范
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • android 媒体播放器 - 如何禁用范围请求? (Nexus 7 上的音频流中断)

    我有一个音频流应用程序 它运行本地代理服务器 本地代理服务器与互联网流媒体源建立 http 连接 在本地获取并缓冲流数据 然后 在应用程序内部 我使用 MediaPlayer 连接到本地代理服务器 使用方法 mediaPlayer setD

随机推荐

  • robots.txt - 这有效吗?

    我刚刚遇到了一个 robots txt 如下所示 User agent Disallow foobar User agent badbot Disallow 仅禁止所有文件夹后 具体是否badbot规则是否适用 注意 此问题仅用于理解上述规
  • 如何查看 DOM 对象属性?

    我想查看 DOM 节点属性 但我似乎无法让它工作 在我的小部件中 我尝试了以下操作 startup function this inherited arguments First try using the dojo 1 6 watch I
  • 使用 javascript 在页面加载之前缓存数组中的动态图像

    我正在尝试制作 4 个滑动画廊 但在以画廊形式显示图像之前 我需要预加载 缓存 闪屏后面的所有图像 我一直在尝试使用 jPreLoader v2 http www inwebson com jquery jpreloader a prelo
  • ImportError:谷歌应用引擎上没有名为flask的模块

    我正在关注这个tutorial我正在尝试开发一个基本的 Flask 应用程序以在 Google App Engine 上运行 我使用的是 Windows 并且每一步都严格遵循指南 我已经设置了虚拟环境并使用以下命令测试了烧瓶是否在其中imp
  • 字体大小 vs 行高 vs 实际高度

    This问题的答案说font size定义框的高度 以便所有字母 包括上升部分和下降部分 都可以容纳 但为什么有一个span40 像素font size and line height实际大小为 45px 如果我正确理解链接的问题 那么 X
  • XCode:当用户单击 UITextbox 时显示 UIDatePicker

    我已经对这个话题进行了彻底的研究 发现人们在许多网站上发布了完全相同的问题 包括 righthere在堆栈溢出中 我已尝试了所有建议 但无法让 UIDatePicker 实际显示 我采取什么方法似乎并不重要 我尝试使用继承模型 在该模型中
  • 是否可以在不停止 iPod 音乐的情况下播放声音?

    是否可以在不停止 iPod 音乐的情况下在应用程序中播放声音 现在我正在使用以下命令 但它会停止 iPod 音乐 soundPath NSBundle mainBundle pathForResource mySound ofType mp
  • Google 地图显示来自 json 的路线

    我遇到的下一个问题是显示基本 JSON 的路线 我在后端进行此调用 curl to https maps googleapis com maps api directions json 我将响应 json 发送回前端 在前端 我尝试渲染路线
  • Ansible 循环 JSON 数组包含对象并替换文件中 JSON 中找到的每个元素

    我有这个 JSON foo1 somevalue1 foo2 somevalue2 zoo1 somevalue111 zoo2 somevalue222 其中我需要在 ansible 和 JSON 数组中的每个对象中循环每个键 对值 我喜
  • Java中的正则表达式匹配器\G(上一场比赛的结束)的例子会很好[重复]

    这个问题在这里已经有答案了 你有边界匹配器 G 的任何有用的例子吗 请给我一些现实世界的例子 Java 源代码值得赞赏 从 掌握正则表达式 Jeffrey E F Friedl 中 我得到了一个解析 HTML 的有用示例 但我不确定如何翻译
  • iOS 8 旋转方法弃用 - 向后兼容性

    在iOS 8中 界面旋转的方法有已弃用 这包括 willRotateToInterfaceOrientation duration didRotateFromInterfaceOrientation willAnimateRotationT
  • 使用 LINQ 从 XML 文件中选择元素

    我有这样的 XML 结构
  • Python:存储大数据结构

    我目前正在用 python 做一个项目 该项目使用相对较大的字典 大约 800 MB 我尝试使用 pickle 来存储其中一本字典 但出现了 MemoryError 在 python 中保存此类文件的正确方法是什么 我应该使用数据库吗 Py
  • 如何从 Bash 中的字符串中删除最后 n 个字符?

    我有一个变量var在包含字符串的 Bash 脚本中 echo var some string rtf 我想删除该字符串的最后四个字符并将结果分配给一个新变量var2 以便 echo var2 some string 我怎样才能做到这一点 你
  • IBM DataPower 3.7.1.x 与 WCF 客户端相关的问题

    我尝试在 WCF 中使用 IBM DataPower 3 7 1 x Web 服务 但收到以下错误消息 找不到 System IdentityModel Tokens X509SecurityToken 令牌类型的令牌身份验证器 根据当前的
  • Nodejs 中的 setInterval 奇怪行为

    我想每秒运行一次函数 而函数本身需要 3 秒来执行 结果是每个间隔的执行时间相差
  • 同一 3D 轴中的多条独立线

    I would like to draw multiple independent lines in a 3D plot in Python It looks like 我是 Python 新手 你能帮我吗 您必须使用 matplotlib
  • PHP计算数组元素[重复]

    这个问题在这里已经有答案了 你好 有人可以解释一下为什么这会返回 一个数组由 0 个元素组成 arr array 1 3 5 count count arr if count 0 echo An array is empty else ec
  • 使 glReadPixel() 运行得更快

    我想要一种非常快速的方法来为我的应用程序捕获 openGL 帧缓冲区的内容 一般来说 glReadPixels 用于将framebuffer的内容读取到缓冲区中 但这很慢 我试图通过创建 4 个线程使用 glReadPixels 从 4 个
  • 为什么我的 ListView 和 CheckBox id 变得混乱?

    我正在女巫单元中实现带有复选框的 ListView 但问题是 当我签入一个单元格并向下滚动列表时 它会变得混乱 其他单元格也会被检查 我需要在 getView 方法中做其他事情吗 这是我的 CustonAdapter public clas