如何显示3级以上的可扩展列表视图?

如何显示超过3级的可扩展列表视图,我只获得3级可扩展的示例。

参考: 三级可扩展列表

在这个例子中,他在ParentLevel BaseExpandableListAdapter getChildView方法中添加了一个可扩展列表:

 CustExpListview SecondLevelexplv = new CustExpListview(Home.this); SecondLevelexplv.setAdapter(new SecondLevelAdapter()); SecondLevelexplv.setGroupIndicator(null); return SecondLevelexplv; 

所以我在SecondLevelAdaptergetChildView方法中添加了一个可扩展列表。

它的工作但是View不像3级可扩展列表视图那样正常。 我读过这个:

3级-可扩展列表-视图-与碰擦特征

多层次,expandablelistviewfunction于安卓

问题-与扩展的多级expandablelistview

请指导或分享我在android中的多级可扩展显示的合适示例。

谢谢,

我发现解决方案,我上传所有java类所以检查所有java或U可以检查这个 :

1:MainActivity.java

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Object obj = new Object(); obj.children = new ArrayList(); for(int i = 0;i(); for(int j=0;j(); for(int k=0;k 

2:Object.java

 public class Object { public String title; // use getters and setters instead public List children; // same as above public Object() { children = new ArrayList(); } } 

3:RootAdapter.java

 public class RootAdapter extends BaseExpandableListAdapter { private Object root; private final LayoutInflater inflater; public class Entry { public final CustExpListview cls; public final SecondLevelAdapter sadpt; public Entry(CustExpListview cls, SecondLevelAdapter sadpt) { this.cls = cls; this.sadpt = sadpt; } } public Entry[] lsfirst; public RootAdapter(Context context, Object root, ExpandableListView.OnGroupClickListener grpLst, ExpandableListView.OnChildClickListener childLst, ExpandableListView.OnGroupExpandListener grpExpLst) { this.root = root; this.inflater = LayoutInflater.from(context); lsfirst = new Entry[root.children.size()]; for (int i = 0; i < root.children.size(); i++) { final CustExpListview celv = new CustExpListview(context); SecondLevelAdapter adp = new SecondLevelAdapter(root.children.get(i),context); celv.setAdapter(adp); celv.setGroupIndicator(null); celv.setOnChildClickListener(childLst); celv.setOnGroupClickListener(grpLst); celv.setOnGroupExpandListener(grpExpLst); lsfirst[i] = new Entry(celv, adp); } } @Override public Object getChild(int groupPosition, int childPosition) { return root.children.get(groupPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // second level list return lsfirst[groupPosition].cls; } @Override public int getChildrenCount(int groupPosition) { return 1; } @Override public Object getGroup(int groupPosition) { return root.children.get(groupPosition); } @Override public int getGroupCount() { return root.children.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // first level View layout = convertView; GroupViewHolder holder; final Object item = (Object) getGroup(groupPosition); if (layout == null) { layout = inflater.inflate(R.layout.item_root, parent, false); holder = new GroupViewHolder(); holder.title = (TextView) layout.findViewById(R.id.itemRootTitle); layout.setTag(holder); } else { holder = (GroupViewHolder) layout.getTag(); } holder.title.setText(item.title.trim()); return layout; } private static class GroupViewHolder { TextView title; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } 

4:SecondLevelAdapter.java

 public class SecondLevelAdapter extends BaseExpandableListAdapter { public Object child; Context mContext; LayoutInflater inflater; public SecondLevelAdapter(Object child,Context context) { this.child = child; this.mContext=context; inflater = LayoutInflater.from(mContext); } @Override public Object getChild(int groupPosition, int childPosition) { return child.children.get(groupPosition).children.get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } // third level @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View layout = convertView; final Object item = (Object) getChild(groupPosition, childPosition); ChildViewHolder holder; if (layout == null) { layout = inflater.inflate(R.layout.item_child, parent, false); holder = new ChildViewHolder(); holder.title = (TextView) layout.findViewById(R.id.itemChildTitle); layout.setTag(holder); } else { holder = (ChildViewHolder) layout.getTag(); } holder.title.setText(item.title.trim()); return layout; } @Override public int getChildrenCount(int groupPosition) { return child.children.get(groupPosition).children.size(); } @Override public Object getGroup(int groupPosition) { return child.children.get(groupPosition); } @Override public int getGroupCount() { return child.children.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } // Second level @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View layout = convertView; ViewHolder holder; final Object item = (Object) getGroup(groupPosition); if (layout == null) { layout = inflater.inflate(R.layout.item_parent, parent, false); holder = new ViewHolder(); holder.title = (TextView) layout.findViewById(R.id.itemParentTitle); layout.setTag(holder); } else { holder = (ViewHolder) layout.getTag(); } holder.title.setText(item.title.trim()); return layout; } @Override public void registerDataSetObserver(DataSetObserver observer) { super.registerDataSetObserver(observer); } @Override public void unregisterDataSetObserver(DataSetObserver observer) { Log.d("SecondLevelAdapter", "Unregistering observer"); if (observer != null) { super.unregisterDataSetObserver(observer); } } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } private static class ViewHolder { TextView title; } private static class ChildViewHolder { TextView title; } } 

5 Constant.java

 public class Constant { static String[] state = {"A","B","C"}; static String[][] parent = { {"aa","bb","cc","dd","ee"}, {"ff","gg","hh","ii","jj"}, {"kk","ll","mm","nn","oo"} }; static String[][][] child = { { {"aaa","aab","aac","aad","aae"}, {"bba","bbb","bbc","bbd","bbe"}, {"cca","ccb","ccc","ccd","cce","ccf","ccg"}, {"dda","ddb","dddc","ddd","dde","ddf"}, {"eea","eeb","eec"} }, { {"ffa","ffb","ffc","ffd","ffe"}, {"gga","ggb","ggc","ggd","gge"}, {"hha","hhb","hhc","hhd","hhe","hhf","hhg"}, {"iia","iib","iic","iid","iie","ii"}, {"jja","jjb","jjc","jjd"} }, { {"kka","kkb","kkc","kkd","kke"}, {"lla","llb","llc","lld","lle"}, {"mma","mmb","mmc","mmd","mme","mmf","mmg"}, {"nna","nnb","nnc","nnd","nne","nnf"}, {"ooa","oob"} } }; } 

5:item_parent.xml

      

使用可消耗列表视图并制作第二个消耗型适配器是一种不推荐的方式,它使整个过程变得复杂,通过使用滚动视图和内部线性布局来扩展不同的视图有一个简单的方法…..

 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 999999 is a size in pixels. // ExpandableListView requires a maximum height in order to do measurement calculations. heightMeasureSpec = MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } 

这使得长度更加合理。

 public class CustExpListview extends ExpandableListView { public CustExpListview(Context context) { super(context); } protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST); heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDetachedFromWindow() { try { super.onDetachedFromWindow(); } catch (IllegalArgumentException e) { // TODO: Workaround for // http://code.google.com/p/android/issues/detail?id=22751 } } }