如何显示超过 3 级的可扩展列表视图? [英] How to display more than 3- levels of expandable List View?

查看:21
本文介绍了如何显示超过 3 级的可扩展列表视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何显示超过 3 级的可展开列表视图,我只得到了 3 级可展开的示例.

参考:three-level-expandable-list

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

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

同样,我在 SecondLevelAdaptergetChildView 方法中再添加一个可扩展列表.

它可以工作,但视图不像 3 级可扩展列表视图那样合适.我读过这个:

3-level-expandable-list-view-with-swipe-功能

multi-level-expandablelistview-in-android

issue-with-expanding-multi-level-expandablelistview

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

谢谢,

解决方案

我找到了解决方案,我正在上传所有 java 类 所以检查所有 java 或者你可以检查 这个:

1:MainActivity.java

public class MainActivity extends Activity {@覆盖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

公共类对象{公共字符串标题;//使用 getter 和 setter 代替公共列表<对象>孩子们;//和上面一样公共对象(){孩子 = 新的 ArrayList();}}

3:RootAdapter.java

public class RootAdapter extends BaseExpandableListAdapter {私有对象根;私有最终 LayoutInflater 充气器;公共类条目{公共最终 CustExpListview cls;public final SecondLevelAdapter sadpt;公共条目(CustExpListview cls,SecondLevelAdapter sadpt){this.cls = cls;this.sadpt = 悲伤;}}公共条目[] lsfirst;公共 RootAdapter(上下文上下文,对象根,ExpandableListView.OnGroupClickListener grpLst,ExpandableListView.OnChildClickListener childLst, ExpandableListView.OnGroupExpandListener grpExpLst) {this.root = 根;this.inflater = LayoutInflater.from(context);lsfirst = 新条目[root.children.size()];for (int i = 0; i < root.children.size(); i++) {最终的 CustExpListview celv = 新的 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] = 新条目(celv,adp);}}@覆盖公共对象 getChild(int groupPosition, int childPosition) {返回 root.children.get(groupPosition);}@覆盖public long getChildId(int groupPosition, int childPosition) {返回子位置;}@覆盖public View getChildView(int groupPosition, int childPosition, boolean isLastChild,视图 convertView,ViewGroup 父级){//二级列表返回 lsfirst[groupPosition].cls;}@覆盖公共 int getChildrenCount(int groupPosition) {返回 1;}@覆盖公共对象 getGroup(int groupPosition) {返回 root.children.get(groupPosition);}@覆盖公共 int getGroupCount() {返回 root.children.size();}@覆盖公共长 getGroupId(int groupPosition) {返回组位置;}@覆盖public View getGroupView(int groupPosition, boolean isExpanded, View convertView,视图组父级) {//第一级视图布局 = convertView;GroupViewHolder 持有人;最终对象项 = (Object) getGroup(groupPosition);如果(布局==空){layout = inflater.inflate(R.layout.item_root, parent, false);持有人 = 新的 GroupViewHolder();holder.title = (TextView) layout.findViewById(R.id.itemRootTitle);layout.setTag(holder);} 别的 {持有人 = (GroupViewHolder) layout.getTag();}holder.title.setText(item.title.trim());返回布局;}私有静态类 GroupViewHolder {文本视图标题;}@覆盖公共布尔 hasStableIds() {返回真;}@覆盖公共布尔 isChildSelectable(int groupPosition, int childPosition) {返回真;}}

4:SecondLevelAdapter.java

public class SecondLevelAdapter extends BaseExpandableListAdapter {公共对象子项;上下文 mContext;LayoutInflater 充气机;公共第二级适配器(对象子级,上下文上下文){this.child = 孩子;this.mContext=上下文;充气器 = LayoutInflater.from(mContext);}@覆盖公共对象 getChild(int groupPosition, int childPosition) {返回 child.children.get(groupPosition).children.get(childPosition);}@覆盖public long getChildId(int groupPosition, int childPosition) {返回子位置;}//第三层@覆盖public View getChildView(int groupPosition, int childPosition, boolean isLastChild,视图 convertView,ViewGroup 父级){视图布局 = convertView;final Object item = (Object) getChild(groupPosition, childPosition);ChildViewHolder 持有人;如果(布局==空){layout = inflater.inflate(R.layout.item_child, parent, false);持有人 = 新的 ChildViewHolder();holder.title = (TextView) layout.findViewById(R.id.itemChildTitle);layout.setTag(holder);} 别的 {持有人 = (ChildViewHolder) layout.getTag();}holder.title.setText(item.title.trim());返回布局;}@覆盖公共 int getChildrenCount(int groupPosition) {返回 child.children.get(groupPosition).children.size();}@覆盖公共对象 getGroup(int groupPosition) {返回 child.children.get(groupPosition);}@覆盖公共 int getGroupCount() {返回 child.children.size();}@覆盖公共长 getGroupId(int groupPosition) {返回组位置;}//第二级@覆盖public View getGroupView(int groupPosition, boolean isExpanded, View convertView,视图组父级) {视图布局 = convertView;ViewHolder 支架;最终对象项 = (Object) getGroup(groupPosition);如果(布局==空){layout = inflater.inflate(R.layout.item_parent, parent, false);持有人 = 新的 ViewHolder();holder.title = (TextView) layout.findViewById(R.id.itemParentTitle);layout.setTag(holder);} 别的 {持有人 = (ViewHolder) layout.getTag();}holder.title.setText(item.title.trim());返回布局;}@覆盖public void registerDataSetObserver(DataSetObserver观察者){super.registerDataSetObserver(观察者);}@覆盖public void unregisterDataSetObserver(DataSetObserver观察者){Log.d("SecondLevelAdapter", "取消注册观察者");如果(观察者!= null){super.unregisterDataSetObserver(观察者);}}@覆盖公共布尔 hasStableIds() {返回真;}@覆盖公共布尔 isChildSelectable(int groupPosition, int childPosition) {返回真;}私有静态类 ViewHolder {文本视图标题;}私有静态类 ChildViewHolder {文本视图标题;}}

5 常量.java

公共类常量{static String[] state = {"A","B","C"};静态字符串 [][] 父 = {{"aa","bb","cc","dd","ee"},{"ff","gg","hh","ii","jj"},{"kk","ll","mm","nn","oo"}};静态字符串[][][] 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

<图像视图android:id="@+id/itemParentImage"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

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 this example he adding one more Expandable list in getChildView method of ParentLevel BaseExpandableListAdapter :

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

SecondLevelexplv.setGroupIndicator(null);   
return SecondLevelexplv;

so Similarily I'am Adding one more Expandable list in the getChildView method of SecondLevelAdapter.

Its Working But View is not coming proper like 3- level of expandable list view. And I have Read this:

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

multi-level-expandablelistview-in-android

issue-with-expanding-multi-level-expandablelistview

Please guideline or share me suitable example for Multi-level expandable display in android.

Thanks,

解决方案

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","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>

这篇关于如何显示超过 3 级的可扩展列表视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆