Problem z rozszerzaniem wielopoziomowego ExpandableListView

Mam multi level (3 poziomy, Root -> Parent -> Child) ExpandableListView zawierający dzieci, które są także ExpandableListViews. Nie mam problemu z ich wypełnieniem; jednak muszę najpierw rozwinąć konkretny element na poziomie nadrzędnym, gdy po raz pierwszy wyświetlam działanie (onCreate).

Z powodzeniem rozwijam powiązany element główny rodzica, ale nie mogę rozwinąć elementu nadrzędnego. Dane słuchacze są wywoływane, ale wynik nie znajduje odzwierciedlenia na mojej liście wielopoziomowej.

Aktywność, w której nazywam rozszerzenie:

public class Activity {
    private int groupToExpand = 4, childToExpand = 3;
    protected void onCreate(Bundle savedInstance) {
        final ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv);
        if (arrayList!= null && !arrayList.isEmpty()) {
            elv.setAdapter(new RootAdapter(this, arrayList);
            // this selects the correct group, but doesn't expand the child.
            elv.setSelectedChild(groupToExpand, childToExpand, true); 
            elv.expandGroup(groupToExpand); // this works.
        }
    }
}

Adapter My Root:

public class RootAdapter extends BaseExpandableListAdapter {

private List<Objects> arrayList;
private Context context;
private LayoutInflater inflater;

public RootAdapter(Context context, List<Objects> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
    this.inflater = LayoutInflater.from(context);
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    final Objects parent = (Objects) getGroup(groupPosition);
    return parent.arrayList.get(childPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final Objects o = (Objects) getChild(groupPosition, childPosition);

    CustomExpandableListView elv = (CustomExpandableListView) convertView;
    ChildViewHolder holder;

    if (elv == null) {
        holder = new ChildViewHolder();

        elv = new CustomExpandableListView(context);
        elv.setGroupIndicator(null);
        elv.setDivider(null);
        elv.setCacheColorHint(Color.parseColor("#00000000"));
        elv.setChildDivider(null);
        elv.setChildIndicator(null);
        elv.setScrollingCacheEnabled(false);
        elv.setAnimationCacheEnabled(false);

        holder.cListView = elv;
        elv.setTag(holder);
    } else {
        holder = (ChildViewHolder) elv.getTag();
    }

    final ParentAdapter adapter = new ParentAdapter(context, o);
    holder.cListView.setAdapter(adapter);

    return elv;
}

private static class ChildViewHolder {
    CustomExpandableListView cListView;
}

@Override
public int getChildrenCount(int groupPosition) {
    final Objects parent = (Objects) getGroup(groupPosition);
    return parent.arrayList.size();
}

@Override
public Object getGroup(int groupPosition) {
    return arrayList.get(groupPosition);
}

@Override
public int getGroupCount() {
    return arrayList.size();
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    View layout = convertView;
    GroupViewHolder holder;
    final Objects o = (Objects) getGroup(groupPosition);

    if (layout == null) {
        layout = inflater.inflate(R.layout.item_to_inflate, parent, false);
        holder = new GroupViewHolder();

        holder.title = (TextView) layout.findViewById(R.id.title);
        holder.image = (ImageView) layout.findViewById(R.id.image);
        layout.setTag(holder);
    } else {
        holder = (GroupViewHolder) layout.getTag();
    }

    holder.title.setText(o.title.trim());

    return layout;
}

@Override
public boolean hasStableIds() {
    return true;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

private static class GroupViewHolder {
    TextView title;
    ImageView image;
}

public class CustomExpandableListView extends ExpandableListView {

    public CustomExpandableListView(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

}

}

Wreszcie mój ParentAdapter:

public class ParentAdapter extends BaseExpandableListAdapter {

private Objects child;
private LayoutInflater inflater;

public ParentAdapter(Context context, Objects child) {
    this.child = child;
    this.inflater = LayoutInflater.from(context);
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return child.arrayList.get(childPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    View layout = convertView;
    final Objects o = (Objects) getChild(0, childPosition);

    ChildViewHolder holder;

    if (layout == null) {
        layout = inflater.inflate(R.layout.item_to_inflate, parent, false);

        holder = new ChildViewHolder();
        holder.title = (TextView) layout.findViewById(R.id.title);
        layout.setTag(holder);
    } else {
        holder = (ChildViewHolder) layout.getTag();
    }

    holder.title.setText(o.title.trim());

    return layout;
}

@Override
public int getChildrenCount(int groupPosition) {
    return child.arrayList.size();
}

@Override
public Object getGroup(int groupPosition) {
    return child;
}

@Override
public int getGroupCount() {
    return 1;
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    View layout = convertView;
    GroupViewHolder holder;

    if (layout == null) {
        layout = inflater.inflate(R.layout.item_to_inflate, parent, false);
        holder = new GroupViewHolder();

        holder.image = (ImageView) layout.findViewById(R.id.image);
        holder.title = (TextView) layout.findViewById(R.id.title);
        layout.setTag(holder);  
    } else {
        holder = (GroupViewHolder) layout.getTag();
    }
    holder.title.setText(o.title.trim());

    return layout;
}

@Override
public boolean hasStableIds() {
    return true;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

private static class GroupViewHolder {
    TextView title;
    ImageView image;
}

private static class ChildViewHolder {
    TextView title;
}

}

Nie mogę rozwinąć list podrzędnych w obrębie katalogu głównego ExpandableListView; Czy znasz jakiś poprawny sposób rozszerzenia elementów na poziomie nadrzędnym?

Próbowałem w getChildView RootAdapter:

if (groupToExpand == groupPosition && childToExpand == childPosition) {
    elv.expandGroup(childToExpand);
}

Następnie w działaniu zmieniłem:

if (arrayList!= null && !arrayList.isEmpty()) {
    RootAdapter adapter = new RootAdapter(this, arrayList);
    elv.setAdapter(adapter);
    // this selects the correct group, but doesn't expand the child.
    elv.setSelectedChild(groupToExpand, childToExpand, true); 
    elv.expandGroup(groupToExpand); // this works.

    adapter.groupToExpand = groupToExpand;
    adapter.childToExpand = childToExpand;
    adapter.notifyDataSetChanged();
}

Rozszerza to element poziomu nadrzędnego, ALE, generuje duplikaty elementów nadrzędnych. Jak mam to zrobić poprawnie? Czy jest to właściwy sposób, ale mój adapter jest uszkodzony, dlatego generuje zduplikowane elementy?

Po prostu nie mogę znaleźć tego, czego tu brakuje ...

questionAnswers(2)

yourAnswerToTheQuestion