带有复选框和全选按钮的可扩展列表视图

时间:2017-05-25 05:49:07

标签: android

enter image description here我在我的应用程序中有可扩展的列表视图。我在可扩展列表视图中有两个组,每个组都有选择所有按钮,当我单击选择所有按钮时检查组中的所有子复选框。我可以实现这个?

Group_items.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="@color/white"
        android:layout_marginTop="5dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/filter_item_header"
            android:textSize="16sp"
            android:text="Header"
            android:layout_centerVertical="true"
            android:textColor="@color/black"
            android:fontFamily="sans-serif-light"
            android:layout_marginLeft="5dp"
            android:textAllCaps="true"/>
        <android.support.v7.widget.AppCompatCheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/filter_select_all"
            android:text="Select All"
            android:textSize="16sp"
            android:fontFamily="sans-serif"
            android:layout_alignParentRight="true"
            android:textAllCaps="false"
            android:layout_marginRight="10dp"
            android:visibility="visible"
            android:focusable="false"/>
    </RelativeLayout>
</LinearLayout>

Child items.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginTop="5dp">
            <android.support.v7.widget.AppCompatCheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/type_checkbox"
                android:text="Type Name"
                android:textSize="14sp"
                android:fontFamily="sans-serif-light"
                android:layout_marginLeft="10dp"
                app:buttonTint="#A9A9A9"
                />

            <android.support.v7.widget.AppCompatCheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/category_checkbox"
                android:text="Category Name"
                android:textSize="14sp"
                android:fontFamily="sans-serif-light"
                android:layout_marginLeft="10dp"
                android:visibility="visible"
                app:buttonTint="#A9A9A9"
                />

    </LinearLayout>
</LinearLayout>

可扩展列表适配器类:

package com.deemsysinc.cyberhealthapp.exercisediary;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Typeface;
import android.support.v7.widget.AppCompatCheckBox;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.deemsysinc.cyberhealthapp.R;
import com.deemsysinc.cyberhealthapp.fooddiary.FoodDiaryChild;
import com.deemsysinc.cyberhealthapp.fooddiary.FoodDiaryGroup;
import com.deemsysinc.cyberhealthapp.utils.AppController;

import java.util.ArrayList;
import java.util.HashMap;

import de.hdodenhof.circleimageview.CircleImageView;


    public class FilterListAdapter extends BaseExpandableListAdapter {
        private Context context;
        private ArrayList<String> titleheader;
        private HashMap<String,ArrayList<FilterChild>> stringArrayListHashMap;
        ArrayList<Integer> categoryArray;
        ArrayList<Integer> typeArray;
        ArrayList<String> categoryString;
        ArrayList<String> typeStrings;
        //-----------------------------------------------------------------------------------------------------//

        //-------------------------------------------------ArrayList-------------------------------------------//
        private ArrayList<FilterGroup> filterGroups;
        //-----------------------------------------------------------------------------------------------------//

        //------------------------------------------------Image Loader-----------------------------------------//
        ImageLoader imageLoader;
        //-----------------------------------------------------------------------------------------------------//

        //----------------------------------------------Constructor--------------------------------------------//
        public FilterListAdapter(Context context, ArrayList<FilterGroup> filterGroups)
        {
            this.context=context;
            this.filterGroups=filterGroups;
        }
        public FilterListAdapter(Context context1,ArrayList<String> titleheader,HashMap<String,ArrayList<FilterChild>> stringFilterChildHashMap)
        {
            this.context=context1;
            this.titleheader=titleheader;
            this.stringArrayListHashMap=stringFilterChildHashMap;
            categoryArray=new ArrayList<Integer>();
            typeArray=new ArrayList<Integer>();
            categoryString=new ArrayList<String>();
            typeStrings=new ArrayList<String>();
        }
        //------------------------------------------------Ends-------------------------------------------------//

        //-----------------------------------------------Base Adapter implementation methods-------------------//
        @Override
        public int getGroupCount() {
            return titleheader.size();
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return this.stringArrayListHashMap.get(this.titleheader.get(groupPosition))
                    .size();
        }

        @Override
        public Object getGroup(int groupPosition) {
            return this.titleheader.get(groupPosition);
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return this.stringArrayListHashMap.get(this.titleheader.get(groupPosition))
                    .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;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            String headerTitle = (String) getGroup(groupPosition);
            if (convertView == null) {
                LayoutInflater infalInflater = (LayoutInflater) this.context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.filtes_item_header, null);
            }

            TextView lblListHeader = (TextView) convertView
                    .findViewById(R.id.filter_item_header);
            AppCompatCheckBox selectAll=(AppCompatCheckBox) convertView.findViewById(R.id.filter_select_all);
            lblListHeader.setText(headerTitle);
            return convertView;
        }

        @Override
        public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            final FilterChild filterChild=(FilterChild) getChild(groupPosition, childPosition);

            if (convertView == null) {
                LayoutInflater infalInflater = (LayoutInflater) this.context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.exercise_filter_list_item, null);
            }

            AppCompatCheckBox txtListChild = (AppCompatCheckBox) convertView
                    .findViewById(R.id.type_checkbox);
            AppCompatCheckBox txtListChild1 = (AppCompatCheckBox) convertView
                    .findViewById(R.id.category_checkbox);
            Log.d("GropPosition",""+groupPosition);
            if(groupPosition==0)
            {
                txtListChild1.setVisibility(View.VISIBLE);
                txtListChild.setVisibility(View.GONE);
                txtListChild1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if(isChecked==true) {
                            Log.d("CategorTheId", filterChild.getCategoryid());
                            categoryArray.add(Integer.parseInt(filterChild.getCategoryid()));
                            String category=filterChild.getCategoryname().substring(0,Math.min(5,filterChild.getCategoryname().length()));
                            Log.d("SubsCateg",category);
                            categoryString.add(category);
                        }
                        else
                        {
                            if(categoryArray.size()>0) {
                                categoryArray.remove(childPosition);
                                notifyDataSetChanged();
                            }
                            if(categoryString.size()>0)
                            {
                                categoryString.remove(childPosition);
                                notifyDataSetChanged();
                            }
                        }

                    }
                });

            }
            if(groupPosition==1)
            {
                txtListChild.setVisibility(View.VISIBLE);
                txtListChild1.setVisibility(View.GONE);
                txtListChild.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if(isChecked==true)
                        {
                            Log.d("TheTypeid",filterChild.getTypeid());
                            typeArray.add(Integer.parseInt(filterChild.getTypeid()));
                            String type=filterChild.getTypename().substring(0,Math.min(5,filterChild.getTypename().length()));
                            typeStrings.add(type);
                        }
                        else
                        {
                            if(typeArray.size()>0)
                            {
                                typeArray.remove(childPosition);
                                notifyDataSetChanged();
                            }
                            if(typeStrings.size()>0)
                            {
                                typeStrings.remove(childPosition);
                                notifyDataSetChanged();
                            }
                        }
                    }
                });
            }

            txtListChild.setText(filterChild.getTypename());
            txtListChild1.setText(filterChild.getCategoryname());
            return convertView;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
        public ArrayList<Integer> getCategoryArray()
        {
            return categoryArray;
        }
        public ArrayList<Integer> getTypeArray()
        {
            return typeArray;
        }
        public ArrayList<String> getCategoryString()
        {
            return categoryString;
        }
        public ArrayList<String> getTypeStrings()
        {
            return typeStrings;
        }
        /**private CompoundButton.OnCheckedChangeListener groupchecklistener = new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                int index = (Integer) buttonView.getTag();

                for(int i = 0;i<filterGroups.get(index).getFilterChildCategories().size();i++){
                    filterGroups.get(index).getContacts().get(i).setCheck(isChecked);
                }

                filterGroups.get(index).setCheck(isChecked);

                notifyDataSetChanged();

            }
        };*/

    }

0 个答案:

没有答案