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

2.  设计BaseExpandableListAdapter的子类

我设计的子类是一种通用的Adapter子类,类的实现中并不包含具体的Layout实现,所有的Layout都由GroupList的getResource和buildView来负责,因此,可以非常灵活地修改Layout的具体实现,而不用修改Adapter的代码。

public class GroupListAdapter extends BaseExpandableListAdapter {
                                                                                                                                                                             
    private Context mContext;
    private List<GroupList> mGroups;
                                                                                                                                                                                 
    public GroupListAdapter(Context context, List<GroupList> groups) {
        this.mContext = context;
        this.mGroups  = groups;
    }
                                                                                                                                                                                 
    @Override
    public Object getChild(int groupPosition, int childPosition) {
                                                                                                                                                                                     
        List<GroupList> chList = mGroups.get(groupPosition).getChild();
        if( chList == null) {
            return null;
        }
                                                                                                                                                                                     
        return chList.get(childPosition);
    }
                                                                                                                                                                             
    @Override
    public long getChildId(int groupPosition, int childPosition) {
                                                                                                                                                                               
        return childPosition;
    }
                                                                                                                                                                               
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view,ViewGroup parent) {
                                                                                                                                                                                                                     
        GroupList child = (GroupList)getChild(groupPosition, childPosition);
        if( child == null) {
            return null;
        }
                                                                                                                                                                                         
        if (view == null) {   
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);       
            view = (RelativeLayout)inflater.inflate(child.getResource(), null);
        }
                                                                                                                                                                                           
        child.buildView(view);
                                                                                                                                                                                     
        return view;
    }
                                                                                                                                                                               
    @Override
    public int getChildrenCount(int groupPosition) {
                                                                                                                                                                                     
        List<GroupList> chList = mGroups.get(groupPosition).getChild();
        if( chList == null) {
            return 0;
        }
                                                                                                                                                                                     
        return chList.size();
    }
                                                                                                                                                                               
    @Override
    public Object getGroup(int groupPosition) {
        return mGroups.get(groupPosition);
    }
                                                                                                                                                                               
    @Override
    public int getGroupCount() {
        return mGroups.size();
    }
                                                                                                                                                                               
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
                                                                                                                                                                               
    @Override
    public View getGroupView(int groupPosition, boolean isLastChild, View view,ViewGroup parent) {
                                                                                                                                                                               
        GroupList group = (GroupList)getGroup(groupPosition);
                                                                                                                                                                                       
        if (view == null) {
                                                                                                                                                                               
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);       
            view = (RelativeLayout)inflater.inflate(group.getResource(), null); 
        }
                                                                                                                                                                               
        group.buildView(view);
                                                                                                                                                                                     
        return view;
    }
                                                                                                                                                                               
    @Override
    public boolean hasStableIds() {
        return true;
    }
                                                                                                                                                                               
    @Override
    public boolean isChildSelectable(int arg0, int arg1) {
        return true;
    }

3.  应用代码

为了简化,我就直接在MainActivity中使用上述封装的类来完成多级列表的功能演示,示例如下:

public class MainActivity extends Activity implements OnGroupClickListener,OnChildClickListener {
                                                                                                                                             
    private ExpandableListView mlistView; 
    private GroupListAdapter mAdapter;
                                                                                                                                                 
    private static final String[] mParentMenu = {
        "Book", "Video", "Audio"
    };
                                                                                                                                                 
    private static final String[][] mChildMenu = {
        { "book1", "book2", "book3", "book4" },
        { "video1", "video2" },
        { "audio1", "audio2", "audio3","audio4"}
    };
                                                                                                                                                 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                                                                                                                                                           
        mlistView = new ExpandableListView(this);                     
        mlistView.setOnGroupClickListener(this);     
        mlistView.setOnChildClickListener(this);
                                                                                                                                                       
        List<GroupList> groups = new ArrayList<GroupList>();
        for( int i=0; i<mParentMenu.length; i++) {         
            List<GroupList> childs = new ArrayList<GroupList>();
            for( int j=0; j<mChildMenu[i].length; j++ ) {
                childs.add(new GroupListChild(mChildMenu[i][j]));
            }
            groups.add(new GroupListParent(mParentMenu[i],childs));
        }
                                                                                                                                             
        mAdapter = new GroupListAdapter(this,groups);
        mlistView.setAdapter(mAdapter);
                                                                                                                                                     
        setContentView(mlistView);   
    }
                                                                                                                                             
    @Override
    public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {
                                                                                                                                                     
        return false;
    }
                                                                                                                                             
    @Override
    public boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) {
                                                                                                                                                   
        return false;
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7b74e6621bbe3f2b6f80e867dc1bd743.html