I am in developing an expandable listview with checkbox in group and child. My Goal is when checkbox in group is checked, so the checkbox in child is checked too. But now I have problem: if the checkbox in group is checked, the child will be checked if I scroll the list after I see all child..
Can anybody help me to solve this problem? Thanks in advance.
This is My Adapter:
public class AdapterHistoryExpandable extends BaseExpandableListAdapter {
private Context context;
private boolean checkAll = false;
private ArrayList<GroupItemsInfo> teamName;
public int isGroupChecked = 0;
HistoryHeaderActivity main;
TotalListener mListener;
class ViewHolder {
public CheckBox checkChild, checkGroup;
public TextView date, h_ps_id, h_ps_name, h_dokname, h_item, h_qty, h_service, heading;
}
public AdapterHistoryExpandable(HistoryHeaderActivity main, ArrayList<GroupItemsInfo> deptList) {
this.main = main;
this.teamName = deptList;
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
@Override
public int getGroupCount() {
return teamName.size();
}
@Override
public int getChildrenCount(int groupPosition) {
ArrayList<ChildItemsInfo> productList = teamName.get(groupPosition).getSongName();
return productList.size();
}
@Override
public Object getGroup(int groupPosition) {
return teamName.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<ChildItemsInfo> productList = teamName.get(groupPosition).getSongName();
return productList.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
public void setmListener(TotalListener mListener) {
this.mListener = mListener;
}
public void setmGroupList(ArrayList<GroupItemsInfo> mGroupList) {
this.teamName = mGroupList;
}
@Override
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, ViewGroup parent) {
final ViewHolder holder;
final GroupItemsInfo headerInfo = (GroupItemsInfo) getGroup(groupPosition);
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.group_items, null);
holder.checkGroup = (CheckBox) convertView.findViewById(R.id.checkList);
holder.checkGroup.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isExpanded)
mListener.expandGroupEvent(groupPosition, isExpanded);
int getPosition = (Integer) buttonView.getTag();
headerInfo.setSelected(isChecked);
if (!isChecked) {
headerInfo.setSelected(false);
}
Intent intent = new Intent(context, AdapterHistoryExpandable.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(intent);
}
});
convertView.setTag(holder);
convertView.setTag(R.id.checkList, holder.checkGroup);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.heading = (TextView) convertView.findViewById(R.id.heading);
holder.checkGroup.setTag(groupPosition);
holder.checkGroup.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
main.groupInfos.get(groupPosition).setSelected(buttonView.isChecked());
}
});
holder.checkGroup.setChecked(main.groupInfos.get(groupPosition).isSelected());
holder.heading.setText(headerInfo.getName().trim());
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final ChildItemsInfo detailInfo = (ChildItemsInfo) getChild(groupPosition, childPosition);
final ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_history, null);
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.date = (TextView) convertView.findViewById(R.id.date_);
holder.h_ps_id = (TextView) convertView.findViewById(R.id.patient_id);
holder.h_ps_name = (TextView) convertView.findViewById(R.id.patient_);
holder.h_dokname = (TextView) convertView.findViewById(R.id.doctor_);
holder.h_item = (TextView) convertView.findViewById(R.id.item_);
holder.h_qty = (TextView) convertView.findViewById(R.id.qty_);
holder.h_service = (TextView) convertView.findViewById(R.id.servicetype_);
holder.checkChild = (CheckBox) convertView.findViewById(R.id.checkBox);
ModelChecking add = new ModelChecking();
if (main.groupInfos.get(groupPosition).isSelected()) {
holder.checkChild.setChecked(true);
if (holder.checkChild.isChecked()) {
add.setIDItem(detailInfo.getHitem());
add.setQtyItem(detailInfo.getHqty());
main.checkingItem.add(add);
}
} else {
holder.checkChild.setChecked(false);
main.checkingItem.clear();
}
holder.h_ps_id.setText(detailInfo.getHp_id().trim());
holder.date.setText(detailInfo.getDate().trim());
holder.h_ps_name.setText(detailInfo.getHp_name().trim());
holder.h_dokname.setText(detailInfo.getHd_name().trim());
holder.h_item.setText(detailInfo.getHitem().trim());
holder.h_qty.setText(detailInfo.getHqty().trim());
holder.h_service.setText(detailInfo.getHservice().trim());
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public void onGroupExpanded(int groupPosition) {
}
@Override
public void onGroupCollapsed(int groupPosition) {
}
@Override
public long getCombinedChildId(long groupId, long childId) {
return 0;
}
@Override
public long getCombinedGroupId(long groupId) {
return 0;
}
}