I have a problem, and can't understand the cause of it. Anytime when onChildClick I change the background color of Expandable ListViews child item I get the change of bakground color not only the item I choose but every nineth item in current child list and other child lists are chosen. I tried this, this, and a lot of other decisions but still can't get it solved. What have I done wrong? Any help will be highly appreciated.
mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener(){
@Override
public boolean onChildClick(ExpandableListView parent, View view, int groupPosition, int childPosition, long id) {
view.setBackgroundColor(Color.GREEN);
mAdapter.notifyDataSetChanged();
return false;
}
});
Adapter
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String>muscleGroupName;
private HashMap<String,List<String>>muscleChildName;
private List<Integer>muscleGroupImage;
private HashMap<Integer, List<Integer>>muscleChildImage;
public ExpandableListAdapter(Context context, List<String>muscleGroupName, HashMap<String,List<String>>muscleChildName,
List<Integer>muscleGroupImage, HashMap<Integer, List<Integer>>muscleChildImage){
this.context = context;
this.muscleGroupName = muscleGroupName;
this.muscleChildName = muscleChildName;
this.muscleGroupImage = muscleGroupImage;
this.muscleChildImage = muscleChildImage;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return this.muscleChildName.get(this.muscleGroupName.get(groupPosition)).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String)getChild(groupPosition, childPosition);
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_child, null);
}
TextView childNameText = (TextView)convertView.findViewById(R.id.child_name);
childNameText.setText(childText);
ImageView childNameImage = (ImageView)convertView.findViewById(R.id.child_image);
int childImage = this.muscleChildImage.get(this.muscleGroupImage.get(groupPosition)).get(childPosition);
childNameImage.setImageResource(childImage);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this.muscleChildName.get(muscleGroupName.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return muscleGroupName.get(groupPosition);
}
@Override
public int getGroupCount() {
return muscleGroupName.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
String groupTitle = (String)getGroup(groupPosition);
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_group, null);
}
TextView groupNameText = (TextView)convertView.findViewById(R.id.group_name);
groupNameText.setText(groupTitle);
ImageView groupImageName = (ImageView)convertView.findViewById(R.id.group_image);
int imageName = muscleGroupImage.get(groupPosition);
groupImageName.setImageResource(imageName);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}