Android ListView 具有多个选择和自定义适配器

2023-11-25

我有一个ListView使用自定义适配器。这ListView允许多项选择,但不知何故它无法识别何时选择了某个项目。

我已经使适配器项目扩展为 Checkable,但仍然getCheckedItemPositions()返回一个包含 false 的数组。

我想我做错了一些基本的事情,但到目前为止我还无法找到多个选择 ListView 的示例,其中适配器不是使用默认布局进行多个选择的 ArrayAdapter。

任何帮助将非常感激。

代码如下:

主要类别:

listView = (ListView) findViewById(R.id.cardlist);

tca = new TextCardAdapter(mInflater);
listView.setAdapter(tca);

Adapter:

public class TextCardAdapter extends BaseAdapter {
private int count = 0;
private List<CheckableCard> cardList = new ArrayList<CheckableCard>();
private LayoutInflater mInflater;

public TextCardAdapter(LayoutInflater inflater) {
    this.mInflater = inflater;
}

@Override
public int getCount() {
    return count;
}

@Override
public Object getItem(int position) {
    return cardList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.textlayout_row, null, false);
        convertView.setClickable(true);

        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(R.id.card_name);
        holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    final CheckableCard card = cardList.get(position);

    holder.text.setText(card.card.toString());
    holder.checkbox.setChecked(card.isChecked());
    holder.checkbox.setOnClickListener(card.checkListener);
    convertView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            card.checkListener.onClick(v);
            holder.checkbox.setChecked(card.isChecked());
        }
    });

    return convertView;
}

public void add(Card card) {
    cardList.add(new CheckableCard(card));
    count++;
    notifyDataSetChanged();
}

public void addAll(Collection<Card> cardColl) {
    for (Card c : cardColl)
        add(c);
}

public void removeAll() {
    count = 0;
    cardList.clear();
    notifyDataSetChanged();
}

public Card getCard(int position) {
    CheckableCard cc = (CheckableCard) getItem(position);
    if (cc == null) return null;
    return cc.card;
}

public class CheckableCard implements Checkable {
    private boolean checked = false;
    public final Card card;
    public final OnClickListener checkListener;

    public CheckableCard(Card card) {
        this.card = card;
        checkListener = new OnClickListener() {

            @Override
            public void onClick(View v) {
                toggle();
            }
        };
    }

    @Override
    public boolean isChecked() {
        return checked;
    }

    @Override
    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    @Override
    public void toggle() {
        checked = !checked;
    }

}

static class ViewHolder {
    TextView text;
    CheckBox checkbox;
}
}

尝试一下:

  1. listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  2. holder.checkbox.setFocusable(false);

  3. 我认为是listView的子项视图应该实现Checkable接口,也就是说转换后的View(convertView)应该具有Checkable的所有方法。

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

Android ListView 具有多个选择和自定义适配器 的相关文章

  • 标记上存在语法错误,需要 AnnotationName - 查询错误

    我收到了令牌语法错误 AnnotationName 预期出现在以下行 query findInBackground new FindCallback
  • 如何在android中将多个图像合并为一个图像?

    我正在开发 android 的分布式应用程序 我已将单个图像分成 4 个部分 然后对其进行处理 现在我想将 4 个位图图像组合成一个图像 我怎样才能做到这一点 Bitmap parts new Bitmap 4 Bitmap result
  • Android Surface 与 Canvas 的关系

    Surface 和 Canvas 之间到底是什么关系 请解释 表面是一个缓冲区 画布保存绘图 视图未附加到画布 也不是表面 窗户被绑在 Surface 和 ViewRoot 询问 随后使用的画布表面 通过要绘制的视图 详细答案你可以阅读这篇
  • 这样理解Activity类似于iOS中的ViewController就可以了吗?

    这样理解Activity类似于iOS中的ViewController就可以了吗 我很困惑接受 Android 中的术语概念 如 活动 服务 等 是的 我想说 Activity 和 ViewController 非常相似 只有一个很大的区别
  • 如何实现可运行队列

    我正在尝试实现一个可运行队列 在异步任务期间依次执行 意味着队列中的下一个将在另一个完成后执行 我编写了一个管理器来管理这些可运行对象和本身就是可运行对象的任务 然后 我获取异步任务中的第一个任务并运行它 希望它能够在队列中运行 但是它最终
  • Android - 对话框内VideoView的MediaController出现在对话框后面

    我有一个VideoView在自定义对话框中 我正在为VideoView即时并将其分配给VideoView在代码中 但是控制器实际上并没有出现在视频上 它出现在对话框后面 知道如何让控制器位于视频上方吗 我创建了一个静态对话框帮助器类来帮助构
  • 如何在android中播放内部和外部SD卡中的mp3文件?

    我正在开发一个 mp3 播放器应用程序 它可以播放内部 SD 卡内任何位置的 mp3 文件 我使用以下代码来获取内部存储中存在的 mp3 文件 ArrayList
  • 即时应用程序上的文本转语音崩溃

    我正在实现一个即时应用程序 该应用程序利用 Android 设备上提供的文本转语音功能 我已经设法得到了TextToSpeech按照 Android 开发博客文章中详细说明的说明 实例已初始化并可在非即时应用程序中正常工作Android 中
  • 设置 ViewGroup 的最大宽度

    如何设置 ViewGroup 的最大宽度 我正在使用一个Theme Dialog然而 当调整大小到更大的屏幕时 它看起来不太好 它也有点轻量级 我不希望它占据整个屏幕 I tried 这个建议 https stackoverflow com
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 过滤列表视图并获取正确的 onclick 项目

    我有一个列表视图 并且已经实现了过滤 假设我有项目 A B 和 C 如果我在过滤框中输入 B 则只会显示项目 B 它是列表的位置 0 之前位于位置 1 因此 当我调用 onClick 项目时 我得到 id position 0 这导致显示有
  • Android appwidget 远程视图未更新

    当我从某些活动更新小部件时 列表远程视图不会更新 我的意思是刷新自身 它会出现直到应用程序小部件的更新 日志显示 但不会进入列表视图的适配器以用新数据填充它 public void onUpdate Context context AppW
  • Android 中可以导入 java.rmi.* 吗?

    我的分布式系统课程中有一个项目 我们必须在我们的项目中使用 java rmi 而且我知道由于 dalvik VM 问题 android 不提供这个库 所以我只是想问是否可以在 Android 上使用这些库 Thanks Android 不支
  • 在 NumberPicker 中显示更多数字

    我有两个问题 第一个问题是删除 NumberPicker 中的分隔线 我在 Android 中扩展 NumberPicker 来解决这个问题 如下所示 import android content Context import androi
  • Android Studio:src/androidTest 和 src/main 文件夹之间的区别?

    我是 Android Studio 的新手 我的问题是 src androidTest 和 src main 文件夹有什么区别 我所有的课程应该放在哪里 Refer Android Studio 概述 http developer andr
  • Android smoothScrollTo 不调用 onScrollStateChanged

    我在用smoothScrollBy 滚动到 a 中的特定位置ListView 我希望在以下情况时得到通知ListView完成滚动以将其与当前集成onScrollStateChanged 当用户用手指滚动时触发的事件 目前我正在使用Timer
  • DOM 中不再存在缓存元素

    就像在类似的问题中一样 我使用appium java 尝试选择元素 在移动应用程序中 我要转到页面 之后有许多元素 android widget ImageView 0 我需要选择 6 个 例如 这样的元素并执行其他步骤 Byt 只能选择一
  • 如何在运行时检查授予权限?

    In Android M 预览版 用户可以选择特定的应用程序并检索特定的权限 所以我问如何在运行时检查授予权限 您可以使用以下复制的代码https android googlesource com platform frameworks b
  • 在片段视图之间切换

    在 xml 布局文件中声明片段的标准方法是
  • PinnedHeaderListView 滚动和标题问题

    背景 我正在尝试模仿 Lollipop 的联系人应用程序显示联系人首字母的固定标题的方式 正如我所写的here https stackoverflow com q 27621425 878126 问题 由于原始代码 发现here http

随机推荐

  • 我无法接收远程视频流

    我在 Linux 上使用 google chrome 21 x 建立了 webrtc 对等连接 但无法接收任何远程视频流 给对等连接 onaddstream 的回调永远不会被调用 有人可以建议我需要查看的位置吗 我粘贴了整个代码 仍然无法接
  • 如何将 CSS 应用到 :before 内容之后的第一个字母?

    p class normal First character of this paragraph will be normal and will have fon p
  • 状态机、模型验证和 RSpec

    这是我当前的类定义和规范 class Event lt ActiveRecord Base state machine initial gt not started do event game started do transition n
  • 使用 Perl 模块与使用 system() 调用

    最近 我用 Perl 为 cPanel 插件编写了一些脚本 其中虽然大部分代码都是用 Perl 编写的 但也有相当多的 system 命令以及我用来直接执行 shell 命令的命令 我非常确定我可以使用 Perl 模块来代替 考虑到时间紧迫
  • 对多线程应用程序进行单元测试

    有人对多线程应用程序的单元测试有任何建议或了解任何框架吗 Do not unit测试多线程应用程序 重构代码以消除不同线程中完成的工作之间的耦合 然后分别进行测试
  • 清除 R / RStudio 中的启动屏幕

    我想更改我第一次打开 R 或实际 Rstudio 时看到的启动 登录屏幕 我想要的只是 gt 提示 仅此而已 我知道我以前在网上见过这个 但不记得搜索短语是什么 我应该补充说我正在使用乌班图Linux 有什么建议么 其他人给你建议如何停止这
  • 将选项值设置为选定的

    我想加载一个选择框 其中用户选择的值将自动出现 我正在从服务器接收带有用户信息的 Json 数据 数据样本是 color red 在我的 html 代码中 我有这样的选择选项
  • Sencha Touch MVC——通过控制器传递数据的推荐方式?

    我正在使用 Sencha Touch 作为移动应用程序 并使用其中的 MVC 功能 我非常喜欢 Sencha 但在使用控制器将数据从一个 屏幕 传递到下一个 屏幕 时遇到了一些麻烦 有一个与许多 Sencha 小部件关联的 记录 属性 例如
  • UnicodeDecodeError:“charmap”编解码器无法解码位置 XXX 中的字节 0x8f:char

    我正在尝试从 python 脚本读取一个日志文件 我的程序在 Linux 中运行良好 但在 Windows 中遇到错误 在读取特定行号的某些行后 我收到以下错误 File C Python lib encodings cp1252 py l
  • 如何在Xamarin中查找当前的UIViewController

    我正在使用Facebook 身份验证 SDK 使用 Xamarin Forms C example 然而 Facebook SDK 已经弃用了该方法 并将其替换为添加了fromViewController变量到构造函数中 我对 Xamari
  • Fluent Wait 和 WebDriver Wait - 差异

    我都看过FluentWait and WebDriverWait在使用 Selenium 的代码中 FluentWait使用轮询技术 即它将在每个固定间隔轮询特定的WebElement 我想知道有什么作用WebDriverWait做与Exp
  • python websocket 握手(RFC 6455)

    我正在尝试使用 RFC 6455 协议在 python 上实现一个简单的 websocket 服务器 我采用了握手格式here and here 我使用 Chromium 17 和 Firefox 11 作为客户端 并收到此错误 Uncau
  • Android AdMob - 请求欧洲用户同意

    我实施了欧盟用户同意政策 with Android AdMob根据本文 问题 UserMessagingPlatform总是失败onConsentInfoUpdateFailure在真实设备 带有 HashedId 或模拟器上 错误 服务器
  • Flask-SQLalchemy 更新一行信息

    如何更新行的信息 例如 我想更改 id 为 5 的行的名称列 使用检索对象Flask SQLAlchemy 文档中显示的教程 获得要更改的实体后 请更改实体本身 然后 db session commit 例如 admin User quer
  • 如何从 SQL Server 发送电子邮件?

    如何使用 T SQL 发送电子邮件 但电子邮件地址存储在表中 我想遍历表格并能够发送电子邮件 到目前为止 我找不到这样做的好例子 步骤 1 创建个人资料和帐户 您需要使用配置数据库邮件向导创建配置文件和帐户 可以从管理节点中数据库邮件节点的
  • ADB 在 Eclipse 中崩溃

    这个问题涉及到这个线程 但是该线程没有答案 因此从技术上讲这不是重复的 我已经在 Windows 7 x64 和 Eclipse SDK 3 6 2 上运行 ADB 1 0 26 并使用 ADT 10 0 1 SDK 工具 r10 并且已经
  • 如何在 Kotlin 中基于/比较多个值进行排序?

    说我有一个class Foo val a String val b Int val c Date 我想对列表进行排序Foos 基于所有三个属性 我该怎么办呢 Kotlin 的 stdlib 为此提供了许多有用的辅助方法 首先 您可以使用以下
  • 将 .html 文件转换为图像 [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在寻找任何能够忠实地将 html 文件转换为图像格式的实用程序 最好是 png 或 jpeg 我在谷歌上搜索了几个小时 下载了十几个免费试用版 但似乎没有任何效果 Adobe Acrobat
  • npm install -g less 不起作用:EACCES:权限被拒绝

    我正在尝试在 phpstorm 上设置 less 以便我可以在保存时将 less 文件编译为 css 我已经安装了node js和下一步 根据这个https www jetbrains com webstorm help transpili
  • Android ListView 具有多个选择和自定义适配器

    我有一个ListView使用自定义适配器 这ListView允许多项选择 但不知何故它无法识别何时选择了某个项目 我已经使适配器项目扩展为 Checkable 但仍然getCheckedItemPositions 返回一个包含 false