android开发之ExpandableListView的使用,实现类似QQ好友列表

由于工作需要,今天简单研究了一下ExpandableListView,做了一个类似QQ列表的Demo,和大家分享一下。 效果图如下:

先来看看主布局文件:

===”com.example.expandablelistview.MainActivity” ><ExpandableListView===></RelativeLayout>

这里我们不使用系统默认的分隔线,两个组之间的距离为8dp.

对于ExpandableListView,系统为我们提供了专门的适配器BaseExpandableListAdapter,我们可以自定义一个适配器继承BaseExpandableListAdapter,实现该类中的一些方法即可。 代码如下:

{private List<GroupBean> list;private Context context;public MyAdapter(List<GroupBean> list, Context context) {this.list = list;this.context = context;}public MyAdapter() {}() {return list.size();}(int groupPosition) {return list.get(groupPosition).getChildren().size();}@Overridepublic Object getGroup(int groupPosition) {return list.get(groupPosition);}@Overridepublic Object getChild(int groupPosition, int childPosition) {return list.get(groupPosition).getChildren().get(childPosition);}(int groupPosition) {return groupPosition;}(int groupPosition, int childPosition) {return childPosition;}() {return false;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {GroupHolder holder;if (convertView == null) {holder = new GroupHolder();convertView = LayoutInflater.from(context).inflate(R.layout.item_group, null);holder.title = (TextView) convertView.findViewById(R.id.group_title);holder.iv = (ImageView) convertView.findViewById(R.id.group_ico);convertView.setTag(holder);} else {holder = (GroupHolder) convertView.getTag();}holder.title.setText(list.get(groupPosition).getGroupName());if (isExpanded) {holder.iv.setImageResource(R.drawable.rounds_open);} else {holder.iv.setImageResource(R.drawable.rounds_close);}return convertView;}@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {ChildHolder holder;if (convertView == null) {holder = new ChildHolder();convertView = LayoutInflater.from(context).inflate(R.layout.item_child, null);holder.name = (TextView) convertView.findViewById(R.id.child_name);holder.sign = (TextView) convertView.findViewById(R.id.child_sign);convertView.setTag(holder);} else {holder = (ChildHolder) convertView.getTag();}ChildBean cb = list.get(groupPosition).getChildren().get(childPosition);holder.name.setText(cb.getName());holder.sign.setText(“[签名]”+cb.getSign());return convertView;}(int groupPosition, int childPosition) {return false;}class GroupHolder {TextView title;ImageView iv;}class ChildHolder {TextView name, sign;}}

这里的代码有点长,我们稍微解释一下,先是构造方法中传入两个参数,一个是数据源list,另外一个是上下文,list是一个GroupBean集合,GroupBean如下:

public class GroupBean {private String groupName;private List<ChildBean> children;public String getGroupName() {return groupName;}(String groupName) {this.groupName = groupName;}public List<ChildBean> getChildren() {return children;}(List<ChildBean> children) {this.children = children;}public GroupBean(String groupName, List<ChildBean> children) {this.groupName = groupName;this.children = children;}public GroupBean() {}}

很明显,GroupBean有两个属性,一个是组名字,另外一个是该组下子项的一个集合,这个ChildBean就是每个组下面的每一个对象的数据,ChildBean代码如下:

public class ChildBean {private String name;private String sign;public String getName() {return name;}(String name) {this.name = name;}public String getSign() {return sign;}(String sign) {this.sign = sign;}public ChildBean(String name, String sign) {this.name = name;this.sign = sign;}public ChildBean() {}}始终调整好自己观风景的心态,

android开发之ExpandableListView的使用,实现类似QQ好友列表

相关文章:

你感兴趣的文章:

标签云: