自定义视图,在 android 中实现带图标的可展开列表(ExpandableListActivity)

这个例子演示了如何自定义 ExpandableListActivity 的样式。效果如图所示,group 条目由两个 TextView 组成,child条目则由一个表示头像的 ImageView,两个表示名字和描述的 TextView,和最右侧一个用于表示操作按扭的 ImageView

[img]http://hi.csdn.net/attachment/201104/14/0_1302742860Y9UD.gif[/img]

我突出主要代码,略掉了 xml,以让你快速学会这个方法。


view plaincopy to clipboardprint?
public class Act1 extends ExpandableListActivity { //需要从ExpandableListActivity继承
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main); //

Adapter1 ada=new Adapter1(); //Adapter1的定义下面,自定义视图是由它实现的
setListAdapter(ada);
}

public class Adapter1 extends BaseExpandableListAdapter {

private String[] groups = //初始化一些数据用于显示分组的标题,这个例子不是为了说明数据如何存取,所以这里用固定数据,使例子更突出重点。
{
"g1",
"g2",
"g3",
};

private String[][] children = //初始化一些数据用于显示每个分组下的数据项,这个例子不是为了说明数据如何存取,所以这里用固定数据,使例子更突出重点。
{
{ "name1" },
{ "name21", "name21" },
{ "name31", "name32", "name33" },
};

@Override
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition]; //获取数据,这里不重要,为了让例子完整,还是写上吧
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition; //
}

@Override
public int getChildrenCount(int groupPosition) {
return children[groupPosition].length; //
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
//重点在这里
LayoutInflater inflate=LayoutInflater.from(Act1.this);
View view=inflate.inflate(R.layout.childlayout, null); //用childlayout这个layout作为条目的视图

ImageView contactIcon=(ImageView)view.findViewById(R.id.contactIcon); //childlayout有一个图标,
contactIcon.setImageResource(R.drawable.h001); //指定它的图片内容,就是示例图中的企鹅了

TextView name=(TextView)view.findViewById(R.id.name); //childlayout有一个用于显示名字的视图
name.setText(children[groupPosition][childPosition]); //给这个视图数据

TextView description=(TextView)view.findViewById(R.id.description); //childlayout有一个用于显示描述的视图,在name视图的下面,
description.setTextKeepState("description"); //这里只是简单的把它的数据设为description

ImageView mycursor=(ImageView)view.findViewById(R.id.myCursor);//childlayout还有一个小图标,在右侧,你可以给它一个单击事件,以弹出对当前条目的菜单。

return view;
}

@Override
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}

@Override
public int getGroupCount() {
return groups.length;
}

@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}

//父列表中的某一项的View
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
//这里的处理方法和getChildView()里的类似,不再重复说了

LayoutInflater inflate=LayoutInflater.from(Act1.this);
View view=inflate.inflate(R.layout.grouplayout, null); //用grouplayout这个layout作为条目的视图

TextView groupName=(TextView)view.findViewById(R.id.groupName);
String group="test group";
groupName.setText(group);

TextView groupCount=(TextView)view.findViewById(R.id.groupCount);
groupCount.setText("["+children[groupPosition].length+"]");

return view;
}

@Override
public boolean hasStableIds() {
return true;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

}
}

注:转自:http://blog.csdn.net/zzzl/archive/2011/04/13/6321112.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值