Problème avec l'Expansion de la Multi-Niveau ExpandableListView

J'ai un multi niveau (3 niveaux, Racine -> Parent -> Enfant) ExpandableListView contenant des enfants qui sont aussi ExpandableListViews.
Je vais avoir pas question de les remplir; cependant, j'ai besoin de développer un élément spécifique dans le niveau Parent quand j'ai d'abord afficher l'Activité (onCreate).

J'ai réussi à élargir le liés à l'élément Racine de la Mère, mais je n'arrive pas à agrandir l'élément Parent. Le les auditeurs sont appelés, et pourtant le résultat n'est pas reflété dans mon multi niveau de la liste.

Activité dans lequel j'appelle l'expansion:

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

Ma Racine de la carte:

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

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

Je ne peux pas étendre l'enfant des listes à l'intérieur de la racine ExpandableListView; connaissez-vous une bonne façon de développer les éléments au niveau du Parent?

J'ai essayé en getChildView de la RootAdapter :

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

Puis dans l'activité que j'ai changé:

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

Cela développe le Parent de l'élément de niveau, MAIS, il génère des doublons de la société Mère. Comment puis-je faire cela correctement? Est-ce la bonne façon, mais ma carte est cassé, générant donc des éléments en double?

Je ne peux pas trouver ce que je suis en manque ici...

Ont u résolu ur problème que j'ai aussi le même problème stackoverflow.com/questions/18765638/... Si u ont résolu ur problème merci de m'aider.
Oui, j'ai résolu mon problème récemment. J'ai fini par l'instanciation de ma Deuxième éléments de niveau dans le constructeur et pas le getChildView méthode. Je vais poster ma mise à jour.
Ok merci Tomap.
vous pouvez poster votre disposition des fichiers

OriginalL'auteur Tomap | 2013-10-10