I have an ExpandableListView with a checkbox next to group name and when 
expanded, child items with checkbox as well.

Let's suppose I have 4 groups with 50 childs. When a group is expanded, and 
I click on select all checkbox, everything works fine, all checkbox are 
selected and keep their state if I scroll. 

But if I scroll untill the last child of the list, scrolling gets buggy 
after that ( scrolling to the top and then touching the screen to stop the 
scrolling doesn't work anymore), clicking on group doesn't work anymore 
too, untill I click on selectall checkbox again. 
Clicking on a child checkbox does nothing, I must click on selectall 
checkbox for everything to work.

I changed Focusable state of the child checkbox, group checkbox and tried 
many ways, but I can not find a solution to this. Do you have an idea of 
where it is coming from?

    public class ExpandableListAdapter extends BaseExpandableListAdapter {

        
        LayoutInflater cinflater;
        LayoutInflater ginflater;
        ArrayList<Group> array;
        Context context;
        
        
        public ExpandableListAdapter(Context context, ArrayList<Group> 
array) {
            super();
            
            cinflater = LayoutInflater.from(context);
            ginflater = LayoutInflater.from(context);
            
            this.array = array;
            this.context = context;
            
        }
        
        
        public class ChildViewHolder {
            
            CheckBox contactcheckbox;
            TextView name;
            
        }
        
        
        @Override
        public int getChildrenCount(int groupPosition) {
            // TODO Auto-generated method stub
            return array.get(groupPosition).getContacts().size();
        }

            
        private OnCheckedChangeListener contactchecklistener = new 
OnCheckedChangeListener() {
                   @Override
                   public void onCheckedChanged(CompoundButton 
checkboxView, boolean isChecked) {
                     
                       Contact contact = (Contact) checkboxView.getTag();
                       contact.setCheck(isChecked);
                       
                   }
                   
                };
        
        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            
            ChildViewHolder cholder;
            
            if(convertView == null){
                
                cholder = new ChildViewHolder();
                
                convertView = cinflater.inflate(R.layout.childsitems, null);
                
                cholder.name = (TextView) 
convertView.findViewById(R.id.childnametextview);
                
                cholder.contactcheckbox = (CheckBox) 
convertView.findViewById(R.id.childcheckbox);
                
cholder.contactcheckbox.setOnCheckedChangeListener(contactchecklistener);
                
                
                convertView.setTag(cholder);
                
            }else{
                
                cholder = (ChildViewHolder) convertView.getTag();
                
            }
            
            
cholder.contactcheckbox.setTag(array.get(groupPosition).getContacts().get(childPosition));
            
cholder.contactcheckbox.setChecked(array.get(groupPosition).getContacts().get(childPosition).isCheck());
            
            
cholder.name.setText(array.get(groupPosition).getContacts().get(childPosition).getName());
            
            return convertView;
        }



        public class GroupViewHolder {
            TextView groupname;
            CheckBox groupcheck;
            
        }
        

        @Override
        public int getGroupCount() {
            // TODO Auto-generated method stub
            return array.size();
        }

        private OnCheckedChangeListener groupchecklistener = new 
OnCheckedChangeListener() {
            
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean 
isChecked) {
                
                int index = (Integer) buttonView.getTag();
                
                for(int i = 0;i<array.get(index).getContacts().size();i++){
                    
array.get(index).getContacts().get(i).setCheck(isChecked);
                }
                
                array.get(index).setCheck(isChecked);
                
                notifyDataSetChanged();
                
            }
        };
        
        
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
        
            
            GroupViewHolder gholder;
            
            if(convertView==null){
                gholder =  new GroupViewHolder();
                convertView = ginflater.inflate(R.layout.groupsitems,null);
                
                gholder.groupname = 
(TextView)convertView.findViewById(R.id.groupnametextview);
                gholder.groupcheckbox = 
(CheckBox)convertView.findViewById(R.id.groupcheckbox);
                
gholder.groupcheckbox.setOnCheckedChangeListener(groupchecklistener);
                
                convertView.setTag(gholder);
                
            }else{
                gholder = (GroupViewHolder)convertView.getTag();
            }
            
            
gholder.groupname.setText(array.get(groupPosition).getGroupname());
            gholder.groupname.setTextSize(24);
            gholder.groupname.setTextColor(Color.parseColor("#FF858585"));
            gholder.groupname.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
            
            int paddingleft = 48;  // 38 dps
            final float scale = getResources().getDisplayMetrics().density;
            int dpvalue = (int) (paddingleft * scale + 0.5f);
            gholder.groupname.setPadding(dpvalue, 16, 0, 16);
            
            
            gholder.groupcheckbox.setTag(groupPosition);
            
gholder.groupcheckbox.setChecked(array.get(groupPosition).isCheck());
            
            if(isExpanded == true){
                      
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.expandedbackground));
            }else{
                convertView.setBackgroundColor(Color.TRANSPARENT);
            }
            
            return convertView;
        }

        
        
        
        
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object getGroup(int groupPosition) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getGroupId(int groupPosition) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public boolean hasStableIds() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int 
childPosition) {
            // TODO Auto-generated method stub
            return false;
        }
        
    }

groupsitems.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >


        <CheckBox
            android:id="@+id/groupcheckbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginTop="12dp"
            android:focusable="false"
            android:gravity="right|center"
            android:paddingRight="10dp" />

    <TextView
    android:id="@+id/groupnametextview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/groupcheckbox"
    android:focusableInTouchMode="false"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#FF858585"
    android:textStyle="bold" />

    </RelativeLayout>

</LinearLayout>

childitems.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android";>

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:paddingLeft="8dp" >


    <TextView
            android:id="@+id/childnametextview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/childcheckbox"
            android:gravity="right|center"
            android:paddingLeft="16dp"
            android:textColor="#FFAFAFAF"
            android:textSize="16sp"
            android:textStyle="bold" />

    <CheckBox
            android:id="@+id/childcheckbox"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />

    </RelativeLayout>

</LinearLayout>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to