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