更改其他子项

时间:2016-10-01 02:06:10

标签: android background expandablelistview

我遇到了问题,无法理解它的原因。任何时候onChildClick我改变可扩展ListViews子项的背景颜色我得到bakground颜色的变化不仅我选择的项目,但选择当前子列表和其他子列表中的每九个项目。 我尝试了thisthis和许多其他决定,但仍无法解决问题。 我做错了什么?任何帮助将受到高度赞赏。

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;
        }
    });

适配器

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;
}
}

1 个答案:

答案 0 :(得分:0)

如果您只想选择项目,请使用此项: https://stackoverflow.com/a/16190228/6502368

但是如果您想自己处理选择请勿回收转换视图项并保存所选项目位置。这样的事情:

body {
    background-color: silver;
    width: 75%;
}

不要忘记在项目点击或您处理选择事件的任何内容中设置int selectedPosition=-1; int selectedPosition_parent=-1; @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final String childText = (String)getChild(groupPosition, childPosition); 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); if(childPosition==selectedPosition && groupPosition==selectedPosition_parent) { //change the background or anything else } return convertView; } selectedPosition