代码之家  ›  专栏  ›  技术社区  ›  kalmeshwar gurav

当单击可展开的ListView时,选中的复选框将自动取消选中,并选中最后一个复选框

  •  1
  • kalmeshwar gurav  · 技术社区  · 9 年前

    Screnshot 当我检查前三个时 CheckBoxes 从…起 ExpandableListView 然后从中展开第一个或第二个项目然后展开第二个 CheckBox 是自动的 未选中的 最后 复选框 是自动的 选中的

    这是 Screenshot 这是一个很好的例子。

    这是我的自定义适配器代码

    public class MyBaseExpandableListAdapter extends BaseExpandableListAdapter{
    Context context;
    ArrayList<Group_Items> group_al;
    
    public MyBaseExpandableListAdapter(Context context,ArrayList<Group_Items> group_al) {
        this.context=context;
        this.group_al=group_al;
    }
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        ArrayList<Child_Items> chList = group_al.get(groupPosition).getItems();
    
        return chList.get(childPosition);
    }
    
    @Override
    public long getChildId(int groupPosition, int childPosition) {
    
        return childPosition;
    }
    
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
                             ViewGroup parent) {
        Child_Items ch = (Child_Items) getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.expandable_child_items, null);
        }
        TextView child = (TextView) convertView.findViewById(R.id.child);
        TextView dd = (TextView) convertView.findViewById(R.id.dd);
        TextView date= (TextView) convertView.findViewById(R.id.date);
    
        child.setText(ch.getChild_title().toString());
        dd.setText(ch.getDd().toString());
        date.setText(ch.getDate().toString());
    
        return convertView;
    }
    
    @Override
    public int getChildrenCount(int groupPosition) {
        ArrayList<Child_Items> chList = group_al.get(groupPosition).getItems();
    
        return chList.size();
    }
    
    @Override
    public Object getGroup(int groupPosition) {
    
        return group_al.get(groupPosition);
    }
    
    @Override
    public int getGroupCount() {
    
        return group_al.size();
    }
    
    @Override
    public long getGroupId(int groupPosition) {
    
        return groupPosition;
    }
    
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        Group_Items gr = (Group_Items) getGroup(groupPosition);
        long group_id = getGroupId(groupPosition);
    
        if (convertView == null) {
            LayoutInflater inf = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = inf.inflate(R.layout.expandable_group_items, null);
        }
    
        TextView title = (TextView) convertView.findViewById(R.id.title);
        title.setText(gr.getName());
        CheckBox chk=(CheckBox) convertView.findViewById(R.id.chk);
    
        return convertView;
    }
    
    @Override
    public boolean hasStableIds() {
    
        return true;
    }
    
    @Override
    public boolean isChildSelectable(int arg0, int arg1) {
    
        return false;
    }
    
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Much Overflow    9 年前

    您可以使用 SparseBooleanArray 为了这个

    在适配器中,初始化并保留一个稀疏布尔数组

    SparseBooleanArray mSelections = new SparseBooleanArray();
    

    在您的 getGroupView ,请执行以下操作

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, 
                                       View convertView, ViewGroup parent) {
        Group_Items gr = (Group_Items) getGroup(groupPosition);
        long group_id = getGroupId(groupPosition);
    
        if (convertView == null) {
            LayoutInflater inf = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = inf.inflate(R.layout.expandable_group_items, null);
           // adding onClick listener on CheckBox for the very first time
           CheckBox chk=(CheckBox) convertView.findViewById(R.id.chk);
           chk.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    int position = (int) v.getTag();
                    mSelections.put(position, !mSelections.get(position, false));
                    ((CheckBox)v).setChecked(mSelections.get(position, false));
                }
    
           });
        }
    
        TextView title = (TextView) convertView.findViewById(R.id.title);
        title.setText(gr.getName());
        CheckBox chk=(CheckBox) convertView.findViewById(R.id.chk);
        chk.setTag(groupPosition);
        // reassigning checkbox to its ticked state
        chk.setChecked(mSelections.get(groupPosition, false));
    
        return convertView;
    }