我有一个Activity,其中有一个ExpandableListView,它有TextView组元素和CheckBox子元素。我遇到的问题是,让我说我扩展了组1.组1有5个子CheckBox元素,我检查了第一个元素。如果我然后折叠组1然后再次展开它,现在检查CheckBoxes列表中的最后一个元素,而第一个元素不是。我已经看到很多关于这个的其他帖子,但它们都没有结果,并且与这个问题不一样,因为重新检查Boxes似乎不是随机的,它似乎是倒置的。再举一个例子,如果我检查了第二个元素,折叠然后再次展开,那么现在将检查倒数第二个元素,依此类推。为什么会这样?我唯一能想到的是,当适配器扩展列表并为每个复选框子元素设置选中的值时,它会以相反的顺序执行。我已经尝试了很多解决方案(例如在折叠时手动保存List中的每个值<>然后在扩展后设置它们),但没有一个有效,我无法解决问题(我是Android开发的新手)。任何帮助是极大的赞赏。我将包含我必须创建的ExpandableListAdapter类的代码以及我的MainActivity的代码。
public class MyListAdapter扩展了BaseExpandableListAdapter {
Context context;
List<String> parents;
Map<String, List<String>> children;
public MyListAdapter(Context context, List<String> parents, Map<String, List<String>> children) {
this.context = context;
this.parents = parents;
this.children = children;
}
@Override
public int getGroupCount() {
return parents.size();
}
@Override
public int getChildrenCount(int i) {
return children.get(parents.get(i)).size();
}
@Override
public Object getGroup(int i) {
return parents.get(i);
}
@Override
public Object getChild(int i, int i1) {
Log.d("Parent, Child", i + " " + i1);
return children.get(parents.get(i)).get(i1);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
String title = (String) getGroup(i);
if (view == null){
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.list_parent,null);
}
TextView chkParent = (TextView) view.findViewById(R.id.txtParent);
chkParent.setText(title);
return view;
}
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
String child = (String) getChild(i,i1);
if (view == null){
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.list_child,null);
}
CheckBox chkChild = (CheckBox) view.findViewById(R.id.chkChild);
chkChild.setText(child);
;
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
}
和MainAcitivty:
String[] array = getResources().getStringArray(R.array.Program);
fillData(array);
expListView = (ExpandableListView) findViewById(R.id.list_Parent);
final ExpandableListAdapter listAdapter = new MyListAdapter(this, parents, map);
expListView.setAdapter(listAdapter);