RadioGroup 按钮在 listView 滚动后失去其状态

2024-01-20

I struggle with a common problem however I can't see the solution to it. What I'm trying to achieve is to display the list of questions (they come from parsed JSON) and radioGroup under each. enter image description here

我已经设法显示问题列表。现在,当我检查按钮并向下滚动列表时,上方的按钮正在失去其状态。我已经关注并阅读了 getView() 并尝试了不同的方法:

stackoverflow.com/...如何处理-oncheckedchangelistener-for-a-radiogroup-in-a-custom-listview-adap https://stackoverflow.com/questions/9392511/how-to-handle-oncheckedchangelistener-for-a-radiogroup-in-a-custom-listview-adap

和这里:

stackoverflow.com...android-如何在列表视图中正确地使无线电组工作 https://stackoverflow.com/questions/2937581/android-how-to-make-radiogroup-work-correctly-in-a-listview

我在 ArrayAdapter 中使用 HashMap。我试图将它们“转换”为对象数组,但没有成功。我不知道如何使每个按钮保持其状态。

你能指出我做错了什么或者我错过了什么吗???

我已经包含了 arrayAdater 的代码和 xml 视觉布局的模型。

public class QuestionListAdapter extends ArrayAdapter<HashMap<String, Object>> {
    PlayerData plData = new PlayerData();
    public int current = NONE;
    public static final int NONE = 1000;
    public static String id;
    private Activity _activity;
    private ArrayList<HashMap<String, Object>> _questionsList;
    private HashMap<String, Object> answers;

    public QuestionListAdapter(Activity activity, int resource,
            ArrayList<HashMap<String, Object>> questionsList) {
        super(activity, resource, questionsList);
        _activity = activity;
        _questionsList = questionsList;
    }

    public static final class ViewHolder {
        TextView question;
        RadioGroup radioG;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder holder = null;

        if (view == null) {
            LayoutInflater layoutInflater = (LayoutInflater) _activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.question_right_fragment,
                    null);
            holder = new ViewHolder();
            holder.question = (TextView) view.findViewById(R.id.question);
            holder.radioG = (RadioGroup) view.findViewById(R.id.radio0);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        final HashMap<String, Object> pData = _questionsList.get(position);
        if (pData != null) {
            holder.question.setText((String) pData.get("questionText"));

            // holder.radioG.clearCheck();
            holder.radioG
                    .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(RadioGroup group,
                                int checkedId) {
                            Integer pos = (Integer) group.getTag();

                            switch (checkedId) {

                            case R.id.radio1:
                                plData.setQ1((byte) 1);
                                break;

                            case R.id.radio2:
                                plData.setQ2((byte) 2);
                                break;

                            case R.id.radio3:
                                plData.setQ3((byte) 3);
                                break;

                            case R.id.radio4:
                                plData.setQ4((byte) 4);
                                break;

                            case R.id.radio5:
                                plData.setQ5((byte) 5);
                                break;

                            case R.id.radio6:
                                plData.setQ6((byte) 6);
                                break;

                            case R.id.radio7:
                                plData.setQ1((byte) 7);
                                break;

                            default:

                            }
                            Log.d("IN PLDATA:", plData.toString());
                            answers.put("id", plData);

                        }
                    });
        } else {
            holder = (ViewHolder) view.getTag();
        }

        holder.radioG.setTag(new Integer(position));
        if (_questionsList.get(position).get(
                holder.radioG.getCheckedRadioButtonId()) != null) {
            RadioButton r = (RadioButton) holder.radioG
                    .getChildAt((Integer) _questionsList.get(position).get(
                            holder.radioG.getCheckedRadioButtonId()));
            r.setChecked(true);
        } else {
            holder.radioG.clearCheck();
        }

        return view;
    }

}

备查。使用稀疏整数数组 http://developer.android.com/reference/android/util/SparseIntArray.html。就我而言,我称之为检查。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) _activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.question_right_fragment, null);
        holder = new ViewHolder();
        holder.question = (TextView) convertView.findViewById(R.id.question);
        holder.radioG = (RadioGroup) convertView.findViewById(R.id.radio0);

        convertView.setTag(holder);


    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    final HashMap<String, Object> pData = _questionsList.get(position);
    if (pData != null){
        holder.question.setText((String)pData.get("questionText"));
    }else{
        holder.question.setText("");    
    }

    holder.radioG.setOnCheckedChangeListener(null);
    holder.radioG.clearCheck();

    if(checked.indexOfKey(position)>-1){
        holder.radioG.check(checked.get(position));
    }else{
        holder.radioG.clearCheck();
    }
    holder.radioG.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if(checkedId>-1){
                checked.put(position, checkedId);
            }else{
                if(checked.indexOfKey(position)>-1)
                    checked.removeAt(checked.indexOfKey(position));
            }
        }
    });

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

RadioGroup 按钮在 listView 滚动后失去其状态 的相关文章

  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • 如何在android中获取Camera2 API的当前曝光

    In android hardware Camera旧的 我使用下面的代码获取当前曝光并获取它Camera Camera Parameters param mCamera getParameters currentExposure para
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • C# 读取xml文件

    我正在尝试拉
  • 如何绑定内联匿名函数?

    我在尝试着bind ie bind this 内联匿名回调函数object如何做呢 简化示例 var object property function this id abc this binds to the object aFuncti
  • D3:使用 d3.max 获取包含对象?

    我有以下数据 一个对象数组 var data x 0 y0 0 y 100 x 1 y0 0 y 150 x 2 y0 50 y 100 x 3 y0 50 y 150 我想找到之间差异最大的对象y and y0 使用 D3 我可以这样做以
  • Netbeans 中的拆分窗口

    我正在尝试拆分我的窗口 以便我可以在 1 个屏幕上拥有 2 个不同的类或其他内容 但它只会拆分同一类 文件 其他内容的窗口 我已经使用 netbeans 多年了 但仍然无法做到这一点 这可能吗 您没有具体提及您正在使用哪个版本的 NetBe
  • SQL Server SMO - 备份 - 如何确定失败/成功?

    如果使用 SMO 执行备份 成功完成后 我测试 SqlError 是否为 null 认为备份已完成且没有错误 但是 正如您所看到的 它实际上返回了 0 类编号 3014 的错误 这意味着成功 所以问题是 问 如何确定备份是否成功完成 以及如
  • 与 jasperReports 完全混淆

    在开始工作前两天 我才刚刚接触 jasper 我下载了 jasperReports 和 iReports 并在我的 salesforce 帐户中安装了 iReports 并安装了 jasper4salesforce 但没有找到任何 jasp
  • jQuery - 内联调用函数

    我正在尝试将一个变量传递给内联 jQuery 函数 即 使用onMouseOver function 在实际链接内 这是图像映射中的区域标记 仅当我将其放在之前时才会调用该函数 document ready function 行 但这样做会
  • 大文件上传(WebException:连接意外关闭)

    UPDATED 看帖子 3 https stackoverflow com questions 1060966 big files uploading webexception the connection was closed unexp
  • android manifestPlaceholders - 如何使用布尔值

    我创建的清单占位符如下所示 manifestPlaceholders appDrawerName Staging canExport true 我正在尝试使用它来设置活动的以下导出属性
  • Forge Viewer 在多模型上下文中选择

    我们的扩展目前利用viewer select 和模型中的dbId 列表 我们的客户希望在同一查看器中看到辅助模型 我们让他们能够在加载第一个模型后加载参考模型 然而 我们遇到了多个模型的问题 观众从其中一个模型中进行选择以外当我们调用vie
  • 有没有办法在Delphi中仅跟踪项目源?

    我正在使用 Delphi 2010 我想知道是否有一种方法可以跟踪项目中的代码 而无需跟踪对包含的 VCL 的调用 For example you put in a breakpoint and then use Shift F7 to t
  • CanCan - 访问被拒绝 - 如何让 CanCan 在 LOG 中指定 为什么?

    我正在努力实现 CanCan 由于某种原因 当我尝试获取有关模型权限的具体信息时 CanCan 不断给出 访问被拒绝 的信息 我不明白为什么 有没有办法让 CanCan 具体说明 也许是在日志中或在开发过程中了解为什么访问被拒绝 比如 没有
  • 非静态模板成员:可能吗?

    是否可以在类中创建非静态模板字段 如果没有 如何解决 此类字段应根据需要在编译时创建 Example 我有很多B 类 如B1 B2 B3 在实际情况中 它们有更有意义的名称 我想创建一个类D具有非静态模板函数add
  • R - 绘制六边形镶嵌

    我想生成一些正方形图 其中有六边形数组 如图所示here http gwydir demon co uk jo tess bighex htm 我想绘制规则 几何规则 和异常六边形镶嵌 所以我认为 sp 包中的工具不起作用 下面是我使用 o
  • 如何将 LinqPAD 中的数据导出为 JSON?

    我想创建一个 JSON 文件作为简单 Web 原型设计练习的一部分 LinqPAD 非常适合以我需要的形式从数据库访问数据 但是我无法轻松地将其作为 JSON 获取 我并不真正关心模式是什么 因为我可以调整我的 JavaScript 以处理
  • 如何在 C# 中检查 Microsoft Edge Chromium 是否安装

    C 中检测 Microsoft Edge Chromium 是否已安装并且同时不检测 Edge 仍在系统中而 Chromium 应覆盖 旧 Edge 的最佳方法是什么 最好使用 Windows 注册表 For 检测旧边缘 https sta
  • 使用 jest 和 vue-test-utils 进行 Vue 测试无法解析通过 app.component() 引入的组件

    我目前正在尝试向我的 Vue 3 Vite 应用程序引入测试 我为此使用 jest 和 vue test utils 这工作正常 除了当我尝试安装包含我的基本组件的组件时 我在 app mount app 之前用 app component
  • Android:从应用程序执行二进制文件

    正如标题所示 我想从我的 android 应用程序执行一个二进制文件 我使用 NDK 创建了一个二进制文件 并可以使用 adb shell 运行它 然后我尝试使用 Runtime exec 运行它 但权限被拒绝 我尝试了不同的目录并更改文件
  • 更改 Android Studio 默认模板中导航抽屉图标的颜色

    Android Studio 中新的默认导航抽屉活动模板 在菜单文件中定义其标题和图标activity main drawer像这样
  • RadioGroup 按钮在 listView 滚动后失去其状态

    I struggle with a common problem however I can t see the solution to it What I m trying to achieve is to display the lis