本文实例讲述了android实现的listview分组布局改进方法。分享给大家供大家参考,具体如下:
由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图:
然后是实现该listview布局的主要代码:
1、程序主界面 separatelistview.java
package whu.iss.wuxianglong;
import java.util.arraylist;
import java.util.list;
import android.app.activity;
import android.content.context;
import android.os.bundle;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.arrayadapter;
import android.widget.listview;
import android.widget.textview;
public class separatelistview extends activity {
listview listview;
myadapter myadapter;
public list listtag = new arraylist();
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
listview = (listview) findviewbyid(r.id.list);
myadapter = new myadapter(this,
android.r.layout.simple_expandable_list_item_1, getdata());
listview.setadapter(myadapter);
}
private list getdata() {
list data = new arraylist();
int i = 0;
data.add("a");
listtag.add("a");
data.add("aa试数据" + (i++));
data.add("a试数据" + (i++));
data.add("aa试数据" + (i++));
listtag.add("b");
data.add("b");
data.add("bb试数据" + (i++));
data.add("b试数据" + (i++));
data.add("b试数据" + (i++));
data.add("b试数据" + (i++));
listtag.add("c");
data.add("c");
data.add("c测试数据" + (i++));
data.add("c测试数据" + (i++));
listtag.add("d");
data.add("d");
data.add("d测试数据" + (i++));
data.add("d测试数据" + (i++));
data.add("d测试数据" + (i++));
listtag.add("e");
data.add("e");
data.add("e测试数据" + (i++));
data.add("e测试数据" + (i++));
data.add("e测试数据" + (i++));
listtag.add("f");
data.add("f" );
data.add("f测试数据" + (i++));
return data;
}
class myadapter extends arrayadapter {
public myadapter(context context, int textviewresourceid,
list objects) {
super(context, textviewresourceid, objects);
}
@override
public boolean areallitemsenabled() {
return false;
}
@override
public boolean isenabled(int position) {
// 如果-开头,则该项不可选
return !listtag.contains(getitem(position));
}
@override
public view getview(int position, view convertview, viewgroup parent) {
view view = convertview;
//根据标签类型加载不通的布局模板
if(listtag.contains(getitem(position))){
//如果是标签项
view = layoutinflater.from(getcontext()).inflate(r.layout.group_list_item_tag, null);
}else{
//否则就是数据项
view = layoutinflater.from(getcontext()).inflate(r.layout.group_list_item, null);
}
//显示名称
textview textview = (textview) view.findviewbyid(r.id.group_list_item_text);
textview.settext(getitem(position));
//返回重写的view
return view;
}
}
}
2、程序主界面布局文件main.xml
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
3、listview中数据部分样式布局文件group_list_item.xml
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dip">
android:src="@drawable/icon"
android:layout_width="50px"
android:layout_height="50px">
android:id="@+id/group_list_item_text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:paddingleft="5dip"
android:gravity="center_vertical">
4、listview中分组标志行的样式布局文件group_list_item_tag.xml
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#555555"
android:paddingleft="10dip">
android:id="@+id/group_list_item_text"
android:layout_width="wrap_content"
android:layout_height="20dip"
android:textcolor="#ffffff"
android:gravity="center_vertical">
希望本文所述对大家android程序设计有所帮助。