代码改变世界

封装好的分组折叠表格

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中的代码(在控制台输出一些字符串)。