How to display more than 3- levels of expandable List View?

后端 未结 4 1210
天命终不由人
天命终不由人 2020-11-28 05:31

How to display more than 3- level of expandable list view, I am getting only examples for 3-Levels expandable.

Referring this :three-level-expandable-list

In

相关标签:
4条回答
  • 2020-11-28 05:44
    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
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 05:46

    Using Expendable List View and make second expendable adapter is a way which is not recommended it make the whole processes complicated there is an easy way by inflating different view by using scroll views and inside Linear layout.....

    0 讨论(0)
  • 2020-11-28 05:55
    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);
    }
    

    this makes much more reasonable length.

    0 讨论(0)
  • 2020-11-28 05:58

    I Found Solution and I am uploading all java class So check all java Or U can check 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","ffffdc","ffffd","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>
    
    0 讨论(0)
提交回复
热议问题