Android:如何在ListView中嵌套ListView (如何实现二级目录结构?)(2)
2013-09-16 17:26
501 查看
如何实现二级目录的折叠显示,以前一直使用ListView嵌套ListView显示,代码比较繁琐,而且布局也比较繁琐。后来发现了ExpandableListView 这个控件能够很好地完成二级目录的折叠显示。
先看一下效果图,然后再反过来看如何实现。
只能看见一级目录时图片如下:
可以看见二级目录的图如下:
实现过程如下:
在需要显示二级目录的Activity的layout文件中定义 ExpandableListView控件下所示:
<ExpandableListView
android:id="@id/history_expandview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:groupIndicator="@null"
android:indicatorRight="0px"/>
红色字体部分代表一级目录左边没有图标。
继承BaseExpandableListAdapter类,重写相应的方法,如下面的代码
public class HistorySiteAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<String> group;//group 为一级目录字符串的值
private ArrayList<ArrayList<URLHistoryItem>> children;//URLHistoryItem为Model类,children为二级目录的对象集合
private LayoutInflater mInflater;
private URLHistoryManager historyManager;
public
HistorySiteAdapter(Context context) {
super();
this.context = context;
this.mInflater = LayoutInflater.from(this.context);
historyManager = new URLHistoryManager(this.context);
initData();
}
private void initData() {
children = new ArrayList<ArrayList<URLHistoryItem>>();
group = historyManager.getHistorySites();
for (String str:group) {
children.add(historyManager.getHistoryBySite(str));
}
}
@Override
public Object getChild(int arg0, int arg1) {
return children.get(arg0).get(arg1);
}
@Override
public long getChildId(int arg0, int arg1) {
return arg1;
}
@Override
public int getChildrenCount(int arg0) {
return children.get(arg0).size();
}
@Override
public View getChildView(int arg0, int arg1, boolean arg2, View arg3,
ViewGroup arg4) {
//此方法是二级目录的现实
View view = arg3;
if (view == null) {
view = mInflater.inflate(R.layout.history_date_item, null);
}
TextView times = (TextView) view.findViewById(R.id.times);
times.setText(children.get(arg0).get(arg1).visit_site);
TextView detail = (TextView) view.findViewById(R.id.detail);
detail.setText(children.get(arg0).get(arg1).visit_detail_url);
return view;
}
@Override
public Object getGroup(int arg0) {
return group.get(arg0);
}
@Override
public int getGroupCount() {
return group.size();
}
@Override
public long getGroupId(int arg0) {
return arg0;
}
@Override
public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) {
View view = arg2;
//此方法为一级目录的现实
if (view == null) {
view = mInflater.inflate(R.layout.history_expand, null);
}
ImageView imageView = (ImageView) view.findViewById(R.id.tubiao);
//根据它是否扩展,来显示不同的图片
if (arg1) {
imageView.setBackgroundResource(R.drawable.ic_expand_down);
} else {
imageView.setBackgroundResource(R.drawable.ic_expand_right);
}
TextView title = (TextView) view.findViewById(R.id.content_001);
title.setText(getGroup(arg0).toString());
return view;
}
public void onGroupExpanded(int groupPosition) {
}
public void onGroupCollapsed(int groupPosition) {
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
@Override
public boolean hasStableIds() {
return false;
}
}
得到ExpandableListView,然后设置Adapter。
private ExpandableListView expandHistory;
expandHistory = (ExpandableListView) findViewById(R.id.history_expandview);
expandHistory.setAdapter(newHistorySiteAdapter(HistoryManageActivity.this));
希望对您有所帮助,如果你有问题请您联系我。
先看一下效果图,然后再反过来看如何实现。
只能看见一级目录时图片如下:
可以看见二级目录的图如下:
实现过程如下:
在需要显示二级目录的Activity的layout文件中定义 ExpandableListView控件下所示:
<ExpandableListView
android:id="@id/history_expandview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:groupIndicator="@null"
android:indicatorRight="0px"/>
红色字体部分代表一级目录左边没有图标。
继承BaseExpandableListAdapter类,重写相应的方法,如下面的代码
public class HistorySiteAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<String> group;//group 为一级目录字符串的值
private ArrayList<ArrayList<URLHistoryItem>> children;//URLHistoryItem为Model类,children为二级目录的对象集合
private LayoutInflater mInflater;
private URLHistoryManager historyManager;
public
HistorySiteAdapter(Context context) {
super();
this.context = context;
this.mInflater = LayoutInflater.from(this.context);
historyManager = new URLHistoryManager(this.context);
initData();
}
private void initData() {
children = new ArrayList<ArrayList<URLHistoryItem>>();
group = historyManager.getHistorySites();
for (String str:group) {
children.add(historyManager.getHistoryBySite(str));
}
}
@Override
public Object getChild(int arg0, int arg1) {
return children.get(arg0).get(arg1);
}
@Override
public long getChildId(int arg0, int arg1) {
return arg1;
}
@Override
public int getChildrenCount(int arg0) {
return children.get(arg0).size();
}
@Override
public View getChildView(int arg0, int arg1, boolean arg2, View arg3,
ViewGroup arg4) {
//此方法是二级目录的现实
View view = arg3;
if (view == null) {
view = mInflater.inflate(R.layout.history_date_item, null);
}
TextView times = (TextView) view.findViewById(R.id.times);
times.setText(children.get(arg0).get(arg1).visit_site);
TextView detail = (TextView) view.findViewById(R.id.detail);
detail.setText(children.get(arg0).get(arg1).visit_detail_url);
return view;
}
@Override
public Object getGroup(int arg0) {
return group.get(arg0);
}
@Override
public int getGroupCount() {
return group.size();
}
@Override
public long getGroupId(int arg0) {
return arg0;
}
@Override
public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) {
View view = arg2;
//此方法为一级目录的现实
if (view == null) {
view = mInflater.inflate(R.layout.history_expand, null);
}
ImageView imageView = (ImageView) view.findViewById(R.id.tubiao);
//根据它是否扩展,来显示不同的图片
if (arg1) {
imageView.setBackgroundResource(R.drawable.ic_expand_down);
} else {
imageView.setBackgroundResource(R.drawable.ic_expand_right);
}
TextView title = (TextView) view.findViewById(R.id.content_001);
title.setText(getGroup(arg0).toString());
return view;
}
public void onGroupExpanded(int groupPosition) {
}
public void onGroupCollapsed(int groupPosition) {
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
@Override
public boolean hasStableIds() {
return false;
}
}
得到ExpandableListView,然后设置Adapter。
private ExpandableListView expandHistory;
expandHistory = (ExpandableListView) findViewById(R.id.history_expandview);
expandHistory.setAdapter(newHistorySiteAdapter(HistoryManageActivity.this));
希望对您有所帮助,如果你有问题请您联系我。
相关文章推荐
- Android:如何在ListView中嵌套ListView (如何实现二级目录结构?)的两种实现方式
- Android-listview实现多级树列表(文件夹目录结构和企业级通讯录结构)
- Android应用源码ListView实现的目录树结构
- Android: 如何在ScrollView中嵌套ListView
- Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑
- 对Android TreeView 的实现,目录结构的实现
- Android实现ListView嵌套Checkbox真正的多选、全选、反选
- android如何实现ListView中的CheckBox的全选、反选、全不选
- 【Android快速入门】目录结构及adb命令【附Android拨号器的实现,自作】
- Android 使用listview实现树形结构
- 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是如何生成的Android的目录结构
- android pulltorefreshlistview 左右滑动如何实现?
- Android开发——listview中嵌套checkBox复选框实现单选、全选删除列表内容
- ListView/RecycleView与树结构实现多级目录
- android listview嵌套gridview,并实现grid元素部分显示以及点击展开与折叠
- Android:Listview中嵌套viewpager的实现总结
- android 树形目录结构的实现(包含源码)
- Android实战技巧:如何在ScrollView中嵌套ListView
- Android实战技巧:如何在ScrollView中嵌套ListView
- Android 如何实现ListView异步加载网络图片