簡體   English   中英

如何在CheckBox Android中使用isChecked設置ArrayList

[英]How to set ArrayList with isChecked in CheckBox android

用戶單擊提交時如何使用復選框設置數據? 我想在isChecked()獲取所有數據

我嘗試此代碼不起作用。

Myadapter

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

用戶檢查完成后,用戶點擊提交

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));
        }
    }
});

用戶未選中時收到錯誤消息

致命異常:主進程:xxx.xx.x,PID:20496 java.lang.IndexOutOfBoundsException:無效的索引36,大小為3

36 is id unChecked

and 3 = size isChecked

如何設置?

將一個布爾參數isChecked添加到模型類中,然后執行以下操作

    viewHoder.cx_select_invite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                chatFriendsListModels.isChecked(isChecked);

            }
        });

然后在您的最終提交按鈕上執行以下操作

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
        }


    }
});

問題似乎是您在for循環中使用了兩個不同的List

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

在這里,您正在迭代ChatGroupInviteFragment.getListFriend列表,該列表的大小似乎為36 當您從ChatGroupInviteFragment.dataMember獲取數據時,其大小似乎為3,因此為ArrayOutOfBoundException

您應該更改為:

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

getView():

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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM