Как отобразить более трех уровней расширяемого вида списка?
Как отображать более 3-х уровней расширяемого вида списка, я получаю только примеры для расширения 3-уровня.
Ссылаясь на это: трехуровневый расширяемый список
В этом примере он добавляет еще один расширяемый список в методе getChildView
для ParentLevel BaseExpandableListAdapter
:
- Как установить выходной stream в TextArea
- Отправка сообщений между двумя объектами JPanel
- Каковы некоторые из «лучших» кросс-платформенных инструментов C ++ UI сегодня?
- Форматирование даты MM / DD / YYYY в текстовом поле в VBA
- Как я могу получить высоту и ширину панели навигации Android программно?
CustExpListview SecondLevelexplv = new CustExpListview(Home.this); SecondLevelexplv.setAdapter(new SecondLevelAdapter()); SecondLevelexplv.setGroupIndicator(null); return SecondLevelexplv;
так что я добавлю еще один расширяемый список в методе getChildView
SecondLevelAdapter
.
Его рабочий просмотр не подходит, как 3-уровневое расширяемое представление списка. И я прочел:
3 уровня расшир-лист-представление-с-салфетки-функция
многоуровневый expandablelistview-в-андроид
эмиссионный с расширяющимся-многоуровневым expandablelistview
Пожалуйста, руководство или поделиться мне подходящим примером для многоуровневого расширяемого дисплея в Android.
Благодаря,
- Как эффективно использовать cardlayout в java для переключения с панели с помощью кнопок внутри различных панельных конструкторов
- Алгоритм для выделения перекрывающихся прямоугольников?
- Как добавить дополнительную кнопку в строку заголовка windows?
- Как создать RecyclerView с несколькими типами просмотра?
- Почему большинство пользовательских интерфейсов однопоточных?
- Как реализовать перетаскиваемую вкладку с помощью Java Swing?
- Как сделать canvas с Swing?
- Размер шрифта Bind в JavaFX?
Я нашел решение, и я загружаю весь class 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
2: Object.java
public class Object { public String title; // use getters and setters instead public List
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"} } }; }
-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
Использование Expendable List View и создание второго расходного адаптера – это способ, который не рекомендуется, чтобы все процессы были сложными, есть простой способ, раздувая различный вид, используя виды прокрутки и внутри линейного макета …..
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 } } }