Android开发实践:多级列表的封装与应用


Android中多级列表可以使用ExpandableListView和SimpleExpandableListAdapter配合来实现,但是,SimpleExpandableListAdapter用起来挺麻烦的,不易理解,而且扩展性也不好,因此,自定义BaseExpandableListAdapter类的子类以及封装相关的操作,用起来会更加直观和方便,我把我设计的封装贴出来供新手参考吧。

GroupList代码下载

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /2013年资料/9月/25日/Android开发实践:多级列表的封装与应用

下载方法见

首先上效果图,如图所示:

Android开发实践:多级列表的封装与应用

1. 首先设计多级列表的标题类

就像文件和文件夹可以统一地用File类来抽象一样,多级列表的一级标题和二级标题其实也可以用同一个基类来抽象,因此,我设计了一个基类和两个子类,GroupList,GroupListChild 和 GroupListParent,其实现如下所示:

(1) GroupList 多级列表标题的抽象基类

public abstract class GroupList {
    private final String mTitle;
                                                                                                                                                                                                                                                                           
    public GroupList(String title) {
        mTitle = title;
    }
                                                                                                                                                                                                                                                                           
    public String getTitle() {
        return mTitle;
    }
                                                                                                                                                                                                                                                                           
    public abstract List<GroupList> getChild();
                                                                                                                                                                                                                                                                           
    public abstract int getResource();     
    public abstract void buildView(View v);
}

(2) GroupListChild 多级列表二级标题子类

public class GroupListChild extends GroupList {
                                                                                                                                                                                                                                 
    public GroupListChild(String title) {
        super(title);     
    }
                                                                                                                                                                                                                               
    @Override
    public int getResource() {
        return R.layout.grouplist_child;
    }
                                                                                                                                                                                                                               
    @Override
    public List<GroupList> getChild() {     
        return null;
    }
                                                                                                                                                                                                                               
    @Override
    public void buildView(View v) {
                                                                                                                                                                                                                                     
        TextView textView  = (TextView)v.findViewById(R.id.GroupListChild);                   
        textView.setText(getTitle());
    } 
}

(3) GroupListParent 多级列表一级标题子类

public class GroupListParent extends GroupList { 

    private List<GroupList> mPopListChilds; 

    public GroupListParent(String title,List<GroupList> childs) {
        super(title);     
        mPopListChilds = childs;
    }
                                                                                                                                                                                                                   
    @Override
    public int getResource() {
        return R.layout.grouplist_parent;
    }
                                                                                                                                                                                                                   
    @Override
    public List<GroupList> getChild() {
        return mPopListChilds;
    }
                                                                                                                                                                                                                       
    @Override
    public void buildView(View v) {
                                                                                                                                                                                                                                 
        TextView textView = (TextView)v.findViewById(R.id.GroupListParent);             
        textView.setText(getTitle());
    }
}

  • 1
  • 2
  • 3
  • 下一页

相关内容