0

私はexpanablelistview(グループビューと子ビュー)でチェックボックスを実行しようとしています。しかし、私はこの概念を理解していません。皆さん、何かアイデアがあれば、私と共有してください。このコンセプト(expanablelistview)で作業するのはこれが初めてです。

グループビューのチェックボックス(CheckBox checkBoxGroup )

  1. groupview(groupposition 0) のチェックボックスをオンにすると、child(childposition 0) のすべての項目をチェックする必要があります。
  2. groupview(groupposition 0) のチェックを外した場合と同じように、child(childposition 0) のすべてのアイテムをオフにする必要があります。

チャイルドビューのチェックボックス(CheckBox 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;
    }

  }
4

2 に答える 2

0

これを試してみてAdapterください。リストをスクロールすると、毎分更新されます。すべてのアイテムにタグを設定する必要があります。そうしないと、タグの値が取得されます

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

の一意の値を識別しますListView

于 2013-01-29T04:33:19.337 に答える
0
  1. リストの現在のステータスを保存するために使用される状態を保存するために、アプリケーション コンテキストで arraylist を取得します。初めてWebサービスまたはどこからでもデータを取得して入力します。

  2. この arraylist をアダプターに渡して、リストを作成します。

  3. グループビューのチェックボックスが変更され、そのリストが更新されました。そして、notifyDatasetChanged を呼び出します。

于 2013-01-29T05:08:26.523 に答える