[英]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.