首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ArrayList安卓系统中用isChecked设置CheckBox

如何在ArrayList安卓系统中用isChecked设置CheckBox
EN

Stack Overflow用户
提问于 2017-07-04 13:42:35
回答 3查看 1.6K关注 0票数 0

当用户单击“提交”时,如何使用复选框设置数据?我想获取isChecked()中的所有数据

我试试看这个代码不起作用。

肌转接器

代码语言:javascript
复制
viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            Log.d("ChatGroupInviteAdap", "onClick position: " + position);
            Log.d("ChatGroupInviteAdap", "onClick getFirstname: " + chatFriendsListModels.get(position).getFirstname());
            id = chatFriendsListModels.get(position).getId();
            ChatGroupInviteFragment.dataMember.add(id);
        }

        if (!isChecked) {
            id = chatFriendsListModels.get(position).getId();
            ChatGroupInviteFragment.dataMember.remove(id);
        }

    }
});

myFragment

当用户检查完成时,用户单击submit

代码语言:javascript
复制
tx_submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "OnClick: " + ChatGroupInviteFragment.dataMember.size());

        for (int i=0;i<ChatGroupInviteFragment.dataMember.size();i++){
            Log.d(TAG, "OnClick2 : " + ChatGroupInviteFragment.dataMember.get(i));
        }
    }
});

当用户unChecked时我会出错

致命异常:主进程: xxx.xx.x,PID: 20496 java.lang.IndexOutOfBoundsException:无效索引36,大小为3

代码语言:javascript
复制
36 is id unChecked

and 3 = size isChecked

怎么设置?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-04 14:07:44

将一个布尔参数isChecked添加到您的模型类中,然后执行如下操作

代码语言:javascript
复制
    viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                chatFriendsListModels.isChecked(isChecked);

            }
        });

然后在你的最后提交按钮上这样做

代码语言:javascript
复制
tx_submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        for (int i=0;i<chatFriendsListModels.size();i++){
            if(chatFriendsListModels.isChecked()==true)
           String id = chatFriendsListModels.get(i).getId();
            // you do what you want with id here
        }


    }
});
票数 1
EN

Stack Overflow用户

发布于 2017-07-04 13:54:01

问题似乎是在for循环中使用两个不同的for

代码语言:javascript
复制
 for (int i=0;i<ChatGroupInviteFragment.getListFriend.size();i++){
                    Log.d(TAG, "OnClick2 : " + ChatGroupInviteFragment.dataMember.get(i))            
 }

在这里,您正在迭代ChatGroupInviteFragment.getListFriend列表,其大小似乎是36。当您从ChatGroupInviteFragment.dataMember获得数据时,它的大小似乎是3,,因此是ArrayOutOfBoundException

你应该改为:

代码语言:javascript
复制
for (int i=0;i<ChatGroupInviteFragment.dataMember.size() - 1;i++)
 {
  Log.d(TAG, "OnClick2 : " + ChatGroupInviteFragment.dataMember.get(i))            
 }
票数 0
EN

Stack Overflow用户

发布于 2017-07-04 13:58:22

getView():

代码语言:javascript
复制
viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {


                int position=  viewHolder.checkbox.getTag(); //Try to get position this way

                id = chatFriendsListModels.get(position).getId();
                ChatGroupInviteFragment.dataMember.add(id);
            }
            if (!isChecked) {
                id = chatFriendsListModels.get(position).getId();
                ChatGroupInviteFragment.dataMember.remove(id);
            }

        }
    });

    viewHolder.checkbox.setTag(position); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44907629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档