如何做到在expanablelistview复选框(在groupview和子视图)(how to d

2019-11-01 12:44发布

我试图做的复选框中expanablelistview(在groupview和子视图)。 但我不理解这个概念。 所以人如果u有任何想法,请与我分享。 这是我第一次在这个概念(expanablelistview)工作。

检查groupview盒(复选框checkBoxGroup)

  1. 如果我检查groupview复选框(groupposition 0)儿童所有项目(childposition 0)必须得到检查。
  2. 一样的,如果我取消groupview(groupposition 0)儿童所有项目(childposition 0)必须得到取消。

复选框中childview(复选框checkBoxChild)

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

  }

Answer 1:

试试这个, Adapter将每分钟刷新一次,当你滚动你的List.You必须为每一个项目设置标签,否则部分你会得到标记值

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

它会在你找出独特的价值ListView



Answer 2:

  1. 承担应用程序上下文一个ArrayList,以保存将被用来保存列表的当前状态的状态。 第一次从Web服务获取数据或任何地方,填充它。

  2. 通过此ArrayList到适配器来填充列表。

  3. 在groupview复选框改变更新该名单。 并调用notifyDatasetChanged。



文章来源: how to do checkbox in expanablelistview (in groupview and child view)