如何在扩展列表视图中执行复选框(在组视图和子视图中)



我正在尝试在扩展列表视图中(在组视图和子视图中)中执行复选框。但我不理解这个概念。所以伙计们,如果你有任何想法,请与我分享。这是我第一次在这个概念(可扩展列表视图)中工作。

视图中的复选框(复选框复选框组)

  1. 如果我选中组视图(组位置 0)中的复选框,则必须选中子项(子位置 0)中的所有项目。
  2. 就像我取消选中组视图(组位置 0)子项(子位置 0)中的所有项目都必须取消选中一样。

视图中的复选框(复选框复选框项;)

  1. 只是复选框中的多项选择。

感谢您的帮助。

这是我下面的代码

public class DetailAdapter extends BaseExpandableListAdapter {
    private LayoutInflater mInflater;
    private ArrayList<PatientSampleDetails> sampleArray;    
    private ArrayList<lstServiceOrderDetails> serviceLst;
    private Activity activity;
    ArrayAdapter<String> adapter;
    View row;
    public LayoutInflater minflater;
    Context mContext;
    int chldPosition;
   //   ServiceOrderList elementChild
    PatientSampleDetails elementChild;
    public static HashMap<Integer,Boolean> selectedGroupMembers = new HashMap<Integer, Boolean>();
    private static View container ;
    ActionItem nextItem;
    int posi;
    lstServiceOrderDetails child;
    View rowView;
    static class ViewHolder {
        private CheckBox checkBoxChild;

        public CheckBox checkBoxGroup;
        public Button button;
        public TextView service;
        }
    public WorkDetailAdapter(Activity activity, ArrayList<PatientSampleDetails> sampleArray) {
        this.sampleArray = sampleArray;
        this.activity = activity;
        mInflater = LayoutInflater.from(activity);      
    }
    public void setInflater(LayoutInflater mInflater) {
          this.minflater = mInflater;
         }

    public Object getChild(int groupPosition, int childPosition) {
        return sampleArray.get(groupPosition).lstServiceOrderDetails.get(childPosition);
    }
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        Log.i("getChildView-getChild", groupPosition + "/" + childPosition);
        child = (lstServiceOrderDetails) getChild(groupPosition, childPosition);
        Log.i("child", "child data"+ child.getServiceName());
        rowView = convertView;
        final ViewHolder holder = new ViewHolder();
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.detaillistrowview, null);
            holder.serviceText = (TextView) convertView.findViewById(R.id.sevice);  
            holder.checkBoxChild = (CheckBox)convertView.findViewById(R.id.checkBox);   

            holder.checkBoxChild.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                            
                         if (isChecked) {
                        elementChild = (PatientSampleDetails) holder.checkBoxChild.getTag();    
                        elementChild.setSelected(buttonView.isChecked());
                        Log.i("buttonView-checkBox", "getChildId  :" + getChildId(groupPosition, childPosition));
                        Log.i("status", ""+ elementChild.isSelected());
                        }   else {                                                    
                                elementChild.setSelected(false);                        
                            }
                         }
                });
            if (selectedGroupMembers.containsKey(groupPosition) == true){
                holder.checkBoxChild.setActivated(true);
                Log.i("true", "true");
                holder.checkBoxChild.setSelectAllOnFocus(true);
            }  else {
                holder.checkBoxChild.setActivated(false);
                Log.i("false", "false");
                holder.checkBoxChild.setSelectAllOnFocus(true);
            }
                convertView.setTag(holder);

            holder.checkBoxChild.setTag(sampleArray.get(groupPosition));
            holder.serviceText.setText(Util.formatN2H(child.getServiceName())); 
            Log.i("child", "child data ---> "+ child.getServiceName() +"/"+child.getServiceName());

        //Now write here code for set colors for rows
      /*  if(childPosition % 2 == 0) {
           convertView.setBackgroundColor(Color.parseColor("#E7E8E8")); 
        } else {
           convertView.setBackgroundColor(Color.parseColor("#C9CACC"));
        }*/
        // To change the color of the Listview row.         
    //      /   convertView.setBackgroundColor((childPosition & 1) == 1 ? Color.parseColor("#E7E8E8") : Color.parseColor("#C9CACC"));
            return convertView;
    }
    public int getChildrenCount(int groupPosition) {
        serviceLst = sampleArray.get(groupPosition).getServiceOrderList();
        return serviceLst.size();       
    }
    public Object getGroup(int groupPosition) {
        return sampleArray.get(groupPosition);
    }
    public int getGroupCount() {
        return sampleArray.size();
    }
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        final ViewHolder holder = new ViewHolder();
        PatientSampleDetails group = (PatientSampleDetails) getGroup(groupPosition);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.getgroupviewdetail, null);
            convertView.setId(groupPosition);
        holder.checkBoxGroup = (CheckBox) convertView.findViewById(R.id.checkBoxGroup);
        holder.checkBoxGroup.setFocusable(false);
        holder.checkBoxGroup.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            PatientSampleDetails elementGroup ;
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                            
                if (isChecked == true) {
                    selectedGroupMembers.put(groupPosition, Boolean.valueOf(true)); //new Boolean(true));
                    elementGroup = (PatientSampleDetails) holder.checkBoxGroup.getTag();
                    elementGroup.setSelected(buttonView.isChecked());
                    Log.i("Clicked : ", "group" + groupPosition);
                    Log.i("buttonView", "getItemId  :" + getGroupId(groupPosition));
                    Log.i("status", ""+ elementGroup.isSelected());
                    Log.i("buttonView", "chldPosition  :" + getChildId(groupPosition, chldPosition));
                    notifyDataSetChanged();
                } else if (selectedGroupMembers.containsKey(groupPosition)) {
                    selectedGroupMembers.remove(groupPosition);
                    elementGroup.setSelected(false);
                    Log.i(" Removed : ", "group" + groupPosition);
                    notifyDataSetChanged();
                }
                }
        });
        convertView.setTag(holder); 
        holder.checkBoxGroup.setTag(sampleArray.get(groupPosition));
        } else {
            ((ViewHolder) convertView.getTag()).checkBoxGroup.setTag(sampleArray.get(groupPosition));
        }
        return convertView;
    }
    public boolean hasStableIds() {
        return false;
    }
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
  }

试试这个,Adapter滚动列表时每分钟刷新一次。您必须为每个项目设置标签,否则您将获得标签值

if (convertView == null) {
 //Add ur code 
 convertView.setTag(holder);
 }else{
holder = (ViewHolder) convertView.getTag();
}

它将识别您ListView中的独特价值。

  1. 在应用程序上下文上获取 arraylist 以保存状态,该状态将是用于保存列表的当前状态。首次从中获取数据网络服务或任何地方并填充它。

  2. 将此数组列表传递给要填充列表的适配器。

  3. 在组视图上更改复选框 更新该列表。 并调用通知数据集已更改。

最新更新