studio recyclerview lista expandible desplegable cardview acordeon android user-interface expandablelistview

recyclerview - lista expandible android studio



¿Cómo mostrar más de 3 niveles de vista de lista expandible? (4)

Cómo mostrar más de 3 niveles de vista de lista expandible, solo obtengo ejemplos de 3 niveles expandibles.

Refiriéndose a esto: three-level-expandable-list

En este ejemplo, agregó una lista expandible más en el método getChildView de BaseExpandableListAdapter :

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

De manera SecondLevelAdapter agregando una lista expandible más en el método getChildView de SecondLevelAdapter .

Su función Working But View no es adecuada como 3 niveles de vista de lista expandible. Y he leído esto:

3-level-expandable-list-view-with-swipe-feature

multi-level-expandablelistview-in-android

issue-with-expanding-multi-level-expandablelistview

Guíenme o compartan un ejemplo adecuado para la pantalla expandible de niveles múltiples en Android.

Gracias,


El uso de la Vista de lista agotable y el segundo adaptador desechable es una forma que no se recomienda, ya que complica todos los procesos, hay una manera fácil de inflar vistas diferentes mediante el uso de vistas de desplazamiento y dentro del diseño Lineal ...


Encontré la solución y estoy cargando toda la clase java. Así que compruebe que todo java o U puede verificar this :

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<Object>(); for(int i = 0;i<Constant.state.length;i++) { Object root = new Object(); root.title = Constant.state[i]; root.children = new ArrayList<Object>(); for(int j=0;j<Constant.parent[i].length;j++) { Object parent = new Object(); parent.title=Constant.parent[i][j]; parent.children = new ArrayList<Object>(); for(int k=0;k<Constant.child[i][j].length;k++) { Object child = new Object(); child.title =Constant.child[i][j][k]; parent.children.add(child); } root.children.add(parent); } obj.children.add(root); } if (!obj.children.isEmpty()) { final ExpandableListView elv = (ExpandableListView) findViewById(R.id.expList); elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { return true; /* or false depending on what you need */; } }); ExpandableListView.OnGroupClickListener grpLst = new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView eListView, View view, int groupPosition, long id) { return true/* or false depending on what you need */; } }; ExpandableListView.OnChildClickListener childLst = new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView eListView, View view, int groupPosition, int childPosition, long id) { return true/* or false depending on what you need */; } }; ExpandableListView.OnGroupExpandListener grpExpLst = new ExpandableListView.OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { } }; final RootAdapter adapter = new RootAdapter(this, obj, grpLst, childLst, grpExpLst); elv.setAdapter(adapter); } } }

2: Object.java

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

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

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingLeft="10dp" > <TextView android:id="@+id/itemParentTitle" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:background="#5ccccc" android:padding="2dp" android:textColor="#006363" android:textSize="20sp" /> <ImageView android:id="@+id/itemParentImage" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>


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

Esto hace que la longitud sea mucho más razonable.


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