如何获取扩展列表视图项中复选框的ID?

2024-01-06

我有一个扩展列表视图,其中父节点和子项目中都有复选框。 所有数据均来自网络服务,因此是动态的。

附图:

现在在菜单项上单击“我想获取所有复选框状态”。 请指导我如何获取其中使用的复选框的 ID。

附代码:

/**
 * 
 */


    public class Object_SecurityActivity extends ExpandableListActivity {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub
            return super.onChildClick(parent, v, groupPosition, childPosition, id);
        }

        @Override
        public void onContentChanged() {
            // TODO Auto-generated method stub
            super.onContentChanged();
        }

        private AndroidClientEntity obj_android_client;
        private static final String LOG_TAG = "ElistCBox2";
        private String username, password, clientname;

        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            //setContentView(R.layout.main);
            Intent security_intent = getIntent();
            String id = security_intent.getStringExtra("id");
            obj_android_client = (AndroidClientEntity) getApplicationContext();
            username = obj_android_client.getUsername();
            password = obj_android_client.getPassword();
            clientname = obj_android_client.getClientName();
            new Securityasync().execute(username, password, clientname, id);

        }

        class Securityasync extends AsyncTask<String, String, String> {
            String sesurity_response = null;
            ProgressDialog dialog;
            private Expandable_list_Adapter expListAdapter;

            @Override
            protected String doInBackground(String... params) {
                if ((isOnline(Object_SecurityActivity.this).equals("true"))) {
                    Security_service security_obj = new Security_service();
                    try {
                        sesurity_response = security_obj.getUsersRoles(params[0],
                                params[1], params[2], params[3]);
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return null;
            }

            @Override
            protected void onPostExecute(String result) {
                if (isOnline(Object_SecurityActivity.this).equals("true")) {

                    setContentView(R.layout.layout_expandable_listview);
                    ArrayList<String> groupNames = new ArrayList<String>();
                    ArrayList<String> sub = new ArrayList<String>();
                    ArrayList<ArrayList<String>> child = new ArrayList<ArrayList<String>>();
                    ArrayList<String> sub_id = new ArrayList<String>();
                    ArrayList<String> objrid = new ArrayList<String>();
                    try {
                        JSONArray json = new JSONArray(sesurity_response);
                        // JSONArray json_child=new JSONArray(sesurity_response);
                        for (int i = 0; i < json.length(); i++) {
                            JSONObject json_obj = json.getJSONObject(i);
                            if (json_obj.getString("PRid").equalsIgnoreCase("0")) {

                                String ObjectRid = json_obj.getString("ObjectRid");
                                int m=0;
                                objrid.add(m,ObjectRid);
                                m++;
                                groupNames.add(json_obj.getString("Name"));
                                for (int j = 0; j < json.length(); j++) {

                                    JSONObject json_child = json.getJSONObject(j);
                                    if (ObjectRid.equalsIgnoreCase(json_child
                                            .getString("PRid"))) {
                                        int n=0;
                                        sub_id.add(n,json_child.getString("ObjectRid"));
                                        sub.add(json_child.getString("Name"));
                                    }

                                }
                                child.add(sub);

                            }

                        }
                        expListAdapter = new Expandable_list_Adapter(getBaseContext(),
                                groupNames, child);
                        setListAdapter(expListAdapter);
                        Log.e("size in error", "son " + json.length());
                    } catch (JSONException e) {
                        Log.e("", "", e);
                        Toast.makeText(getBaseContext(), "parsing error",
                                Toast.LENGTH_LONG).show();
                    }
                    Log.e("sizeof list", ""+sub_id.size());
                    Iterator itr=objrid.iterator();


                    while(itr.hasNext()){
                        Log.e("id","value "+itr.next());
                    }

                }
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();

            }
        }

    }

和适配器类:

public class Expandable_list_Adapter extends BaseExpandableListAdapter implements OnCheckedChangeListener {

    private Context context;
    private ArrayList<String> groupNames;
    private ArrayList<ArrayList<String>> child;
    private LayoutInflater inflater;

    public Expandable_list_Adapter(Context context, 
                        ArrayList<String> groupNames,
                        ArrayList<ArrayList<String>> child ) { 
        this.context = context;
        this.groupNames= groupNames;
        this.child = child;
        inflater = LayoutInflater.from( context );
    }

    public Object getChild(int groupPosition, int childPosition) {
        return child.get( groupPosition ).get( childPosition );
    }

    public long getChildId(int groupPosition, int childPosition) {
        return (long)( groupPosition*1024+childPosition );  // Max 1024 children per group
    }

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View v = null;
        if( convertView != null )
            v = convertView;
        else
            v = inflater.inflate(R.layout.child_row, parent, false); 
       String c = (String)getChild( groupPosition, childPosition );
        TextView color = (TextView)v.findViewById( R.id.childname );
        if( color != null )
            color.setText( c );

        CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );

        //cb.setChecked(false);
        cb.setOnCheckedChangeListener(this);
        return v;
    }

    public int getChildrenCount(int groupPosition) {
        return child.get( groupPosition ).size();
    }

    public Object getGroup(int groupPosition) {
        return groupNames.get( groupPosition );        
    }

    public int getGroupCount(){
         return groupNames.size();
    }
    public long getGroupId(int groupPosition) {
        return (long)( groupPosition*1024 );  // To be consistent with getChildId
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View v = null;
        if( convertView != null )
            v = convertView;
        else
            v = inflater.inflate(R.layout.group_row, parent, false); 
        String gt = (String)getGroup( groupPosition );
        TextView colorGroup = (TextView)v.findViewById( R.id.childname );
        if( gt != null )
            colorGroup.setText( gt );
        CheckBox cb = (CheckBox)v.findViewById( R.id.check2 );
        cb.setChecked(false);
        return v;
    }

    public boolean hasStableIds() {
        return true;
    }

    public boolean isChildSelectable(int groupPosition, int childPosition) {
        Log.e("is group checked","group "+groupPosition);
        Log.e("selectable","has" +childPosition);
        return true;
    } 

    public void onGroupCollapsed (int groupPosition) {}
    public void onGroupExpanded(int groupPosition) {}

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO Auto-generated method stub

    }
public void isChecked(){

}

}

孩子.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
      android:background="#21415A"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/childname"
         android:paddingLeft="50px"
         android:focusable="false"
         android:textSize="14px"
         android:textStyle="italic"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>

    <TextView android:id="@+id/rgb"
         android:focusable="false"
         android:textSize="14px"
         android:textStyle="italic"
         android:layout_width="100px"
         android:layout_height="wrap_content"/>

    <CheckBox
        android:id="@+id/check1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:focusable="false" />

</RelativeLayout>

parent.xml 与 child 相同。

请指导我如何获取复选框的 ID,因为在选择的菜单项上我必须对此进行基础操作。

编辑:我尝试 setTag() 和 getTag() 。但现在可扩展列表视图显示出奇怪的行为。当我选择一个复选框并展开另一个组时,所有 chekbok 框都设置为默认值。 在这种情况下我必须做什么。我不知道为什么它不保存状态。 我面临着同样的问题Expandablelistview 中的奇怪行为 - Android https://stackoverflow.com/questions/3633823/strange-behaviour-in-expandablelistview-android请指导


实际上,您在运行时复制的列表或网格上添加的任何控件都具有与您在设计时声明的相同的 id

例如:在你的情况下,这些是 childname,rgb,check1

所以如果你需要知道哪个复选框是唯一的 你应该使用 for 循环进行一一查找

如果你想做某事为什么不这样做

复选框单击事件

public void onClickevent(View v)
{
private CheckBox ch = (CheckBox) findViewById(v.getId());
    if (ch.IsChecked){
    //do some thing
     }
}

或者你应该和我一起去 方式添加一个独特的字段,例如

 <TextView
        android:id="@+id/txtComp1_ID"
        android:layout_width="0sp"
        android:layout_height="40sp"
        android:textSize="1pt" >
    </TextView>

因为它的宽度为零,所以它不可见,但它保存该行的 id

现在对列表视图中的所有项目运行 for 循环

findview 您选中复选框,然后找到其父级,然后再次找到此 id 字段的子级(文本视图) 现在您的 id 和复选框检查状态与之前一样 这样你就可以得到这个

参见示例

v = (LinearLayout) findViewById(R.id.LinearNotebookList);
            TextView _id, ID, Name;
            for (int i = 0; i < nCount; i++) {
                v = (LinearLayout) NotebookList.getAdapter().getView(i, null,
                        null);
                _id = (TextView) v.findViewById(R.id.txt_Notebook_ID);

                Available = (CheckBox) v
                        .findViewById(R.id.chkboxNotebookAvailable);
                Display = (CheckBox) v.findViewById(R.id.chkboxNotebookDisplay);
                Demo = (CheckBox) v.findViewById(R.id.chkboxNotebookDemo);
                str_id = (String) _id.getText();

                if (Available.isChecked()) {
                    strAvailable = "YES";
                } else {
                    strAvailable = "NO";
                }
                if (Display.isChecked()) {
                    strDisplay = "YES";
                } else {
                    strDisplay = "NO";
                }
                if (Demo.isChecked()) {
                    strDemo = "YES";
                    } else {
                        strDemo = "NO";
                    }
}

你可以根据你的需要改变它

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

如何获取扩展列表视图项中复选框的ID? 的相关文章

  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 更新到材质 1.2.0 后,材质按钮上缺少圆角半径属性

    这是我的材质按钮代码
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 下载后从谷歌照片库检索图像

    我正在发起从图库中获取照片的意图 当我在图库中使用 Nexus 谷歌照片应用程序时 一切正常 但如果图像不在手机上 在 Google Photos 在线服务上 它会为我下载 选择图像后 我将图像发送到另一个活动进行裁剪 但在下载的情况下 发
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Android中webview的截图方法

    我在 webview 中的 html5 canvas 上画了一些线 并尝试使用下面的代码截取 webview 的屏幕截图 WebView webView WebView findViewById R id webview webView s
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • 如何修复错误“命名管道提供程序,错误 40 - 无法打开与“SQL Server”的连接?

    我似乎无法从站点连接到我的数据库 我收到此错误 命名管道提供程序 错误 40 无法打开与 SQL Server 的连接 我尝试使用本地 IP 地址和公共 IP 地址进行连接 我试过了 是的 该站点可以与服务器通信 命名管道 TCP 已启用
  • 查找在 BigQuery 中创建表的查询

    我是公司的新员工 我之前的人已经在 BigQuery 中构建了一些表 我想研究该特定表的创建表查询 我想使用查询检查的事情是 使用了什么连接 用于制作相关表格的其他表格是什么 我以前没有使用过 BigQuery 但我通过阅读教程和文档进行了
  • 将文件从应用程序拖动到资源管理器。我的应用程序可以进行复制吗?

    在 Qml 中 我可以使用以下命令开始拖动text uri listmime 类型 以便启动从我的应用程序到文件资源管理器的复制操作 例如 Item id draggable anchors fill parent Drag active
  • 从元素中删除 :active 伪类

    我希望能够告诉一个元素它不再是 active这样 CSS 规则就不再适用 有没有办法在 JavaScript 中做到这一点 可能的解决方案 1 使用类 JS document getElementById element classList
  • ARM 周期精确模拟器

    是否有免费且周期精确的 ARM Cortex A9 模拟器 我认为 ARM IDE 提供了某种分析器 但首先我不确定它是否提供命令行界面 其次它不是免费的 我希望能从 GNU 找到一些东西 但我找不到 没有可用于最新 ARM 内核的免费周期
  • 以编程方式获取 12 Hive 的目录路径

    有没有办法以编程方式获取12 Hive的目录路径 我正在创建一个功能 将文件传递到 12 配置单元中的 XML 目录 并且我不想在代码中硬编码目录路径 是否有任何对象模型属性将 12 Hive 目录路径字符串公开为属性 您可以使用 Micr
  • SQL DataReader 网络使用限制

    我有这样的想法 不知道好坏 我有实用程序 它通过 reglament 连接到 SQL Server 并将一些数据获取到应用程序 数据很简单 2 个 varchar 文本属性 但数据数量约为 300 万行 因此 我的应用程序非常频繁地使用网络
  • 使用 PHP Simple HTML DOM Parser 之前登录 ASP 网站

    我正在使用 PHP Simple HTML DOM Parser 来解析来自游戏 ASP 网站的数据 我需要获取的数据仅对注册用户可见 因此在开始使用之前我需要一些东西来登录网站 有人可以建议我一个脚本或可以做到这一点的东西吗 预先非常感谢
  • 如何在 guile-2.0.11 的 macOS Sierra 版本上修复 libguile/stime.c?

    在此输入链接描述 http lists gnu org archive html bug guile 2016 06 msg00252 htmlguile 2 0 11 的构建因以下错误而停止 Undefined symbols for a
  • 如果命名空间也定义为默认值,则强制 XDocument 不使用命名空间前缀

    我有一个 xml 文件 其中指定了带或不带名称空间前缀的默认名称空间 当我生成 xml 输出时 我会为所有 xml 元素添加前缀 由于我使用的是默认命名空间 有没有办法摆脱前缀 class Program static void Main
  • 物理内存的对齐是如何保证的?

    malloc 返回适合任何内置类型的内存 如果需要更具体的对齐 例如 16 或 32 字节 可以在应用程序级别完成 但这种对齐是在虚拟内存级别 如何保证底层物理内存也处于相同的对齐方式 虚拟内存是在页面级别实现的 因此每个虚拟机页面在加载到
  • 从 F# 中的序列中删除单个非唯一值

    我有一个代表 F 中骰子的整数序列 在所讨论的游戏中 玩家有一池骰子 可以选择玩一个 受某些规则约束 并保留其余的 例如 如果玩家掷出 6 6 和 4 并决定玩一个 6 是否有一种简单的方法可以返回仅删除一个 6 的序列 Seq filte
  • Python - 快速批量修改PNG

    我编写了一个 python 脚本 以独特的方式为 OpenGL 着色器组合图像 问题是我有大量非常大的地图 需要很长时间来处理 有没有办法以更快的方式写这个 import numpy as np map data image data fo
  • 反应本机构建错误:包 android.support.annotation 不存在

    我必须完全重写这个问题 我有一个反应本机 Android 应用程序 当我建造apk文件与 gradlew assembleRelease x bundleReleaseJsAndAssets 一切顺利 但之后就完全停止编译了 甚至react
  • 无限斐波那契数列

    我正在尝试使用序列在 F 中模仿 Haskell 著名的无限斐波那契列表 为什么以下序列的计算结果不符合预期 它是如何被评估的 let rec fibs lazy Seq append Seq ofList 0 1 Seq map2 fib
  • Wicket 是适合单页应用程序的 Web java 框架吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • linq toEntity vs Fluent nhibernate vs linq to sql(帮助)

    我必须为新闻频道建立一个网站 请帮我决定使用哪种技术进行数据操作 1 实体连接 2 Linq 到 SQL 3 流畅的NHibernate 4 ADO Net 网站将基于 ASP Net MVC 和 C 主要问题 1 应该易于维护和扩展 2
  • Visual Studio Code Intellisense 不适用于 Javascript

    我在 Windows 和 Mac 上使用 Visual Studio Code VSC 0 10 11 为了解决这个问题 我有这个小 JavaScript 片段 use strict const os require os console
  • 每天在 8:00、12:30、17:00 运行 Gmail Google Apps 脚本

    我需要每天运行 Google Apps 脚本 3 次 8 00 12 30 17 00 这个怎么做 我已经看过了Triggers 更具体地说Time driven 小时计时器 但是Every hour Every 2 hours Every
  • 如何获取扩展列表视图项中复选框的ID?

    我有一个扩展列表视图 其中父节点和子项目中都有复选框 所有数据均来自网络服务 因此是动态的 附图 现在在菜单项上单击 我想获取所有复选框状态 请指导我如何获取其中使用的复选框的 ID 附代码 public class Object Secu