如何显示超过 3 级的可扩展列表视图? [英] How to display more than 3- levels of expandable List View?
问题描述
如何显示超过 3 级的可展开列表视图,我只得到了 3 级可展开的示例.
参考:three-level-expandable-list一个>
在这个例子中,他在 ParentLevel BaseExpandableListAdapter
的 getChildView
方法中添加了一个可扩展列表:
CustExpListview SecondLevelexplv = new CustExpListview(Home.this);SecondLevelexplv.setAdapter(new SecondLevelAdapter());SecondLevelexplv.setGroupIndicator(null);return SecondLevelexplv;
同样,我在 SecondLevelAdapter
的 getChildView
方法中再添加一个可扩展列表.
它可以工作,但视图不像 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
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屋!