封装好的分组折叠表格
2011-06-21 20:31 乱世文章 阅读(390) 评论(0) 编辑 收藏 举报
《Android开发:BaseExpandableListAdapter的使用》一文中,虽然我已经把所有的源代码贴到原文里了,但仍然有人找我要源代码 :-(
我也颇能理解大家的心情,因为有一份可以运行的代码其学习效果显然是不一样的,而且连Ctrl+c和Ctrl+v都省掉了。
只是博主也是个很懒的人,做完的例子随手就删除了,没有现成的工程给大家。与其再重新做一个,不如再封装一下,给现成的类给大家调用算了。我把它打包到资源里:http://download.csdn.net/source/3383332
下载后解开压缩包,得到下列文件:
FieldGroup.java
GroupedFieldAdapter.java
simplefield.xml
现在我来解释怎么用这3个文件。
打开Eclipse,新建Android Application, 在src目录下新建package,名为ydtf,然后将两个java文件放到ydtf包下面。
将xml文件放到res/layout目录下面。
新建Activity,双击打开Activity的xml布局文件。在其中加入一个ExpandabledListView的Widget:
<!-- 分组列表 -->
< ExpandableListView android:id = "@+layout/gddetail"
android:layout_width = "fill_parent" android:layout_height = "0dip"
android:layout_weight = "1" />
打开Activity的java文件,在import部分导入两个类:
import ydtf.FieldGroup;
import ydtf.GroupedFieldAdapter;
然后声明几个实例变量:
// 声明折叠分组表格需要的 3 个对象
private GroupedFieldAdapter exlist_adapter = null ; // 适配器
private ExpandableListView exlist ; // 视图
private List<FieldGroup> groups ; // 模型
在onCreate方法中,加入代码:
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. dxdz_main );
// 取得 listview
exlist = (ExpandableListView) findViewById(R.layout. gddetail );
// 初始化 groups
groups = new ArrayList<FieldGroup>();
// 往 groups 中放入 3 个 FieldGroup 对象,在每个 FieldGroup 对象中放入 2 行数据
for ( int i=0;i<3;){
i++;
FieldGroup fg= new FieldGroup( " 第 " +i+ " 组 " );
fg.addChild( " 第 1 行 " , i+ "1" );
fg.addChild( " 第 2 行 " , i+ "2" );
groups .add(fg);
}
// 构建 expandablelistview 的适配器
exlist_adapter = new GroupedFieldAdapter( this , groups );
exlist .setAdapter( exlist_adapter ); // 绑定视图-适配器
}
运行程序,可得到以下效果:
如果要响应行点击事件, 需要 Activity 实现 ExpandableListView d OnChildClickListener 接口方法onChildClick:
// 响应行被点击事件
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Object value= exlist_adapter .getChild(groupPosition, childPosition);
Log.i ( "click row :" , (String)value);
return false ;
}
然后在onCreate方法中加上此句:
// 响应行被点击事件
exlist .setOnChildClickListener( this );
这样,当点击某行时,会调用onChildClick中的代码(在控制台输出一些字符串)。