zoukankan      html  css  js  c++  java
  • android 适配器Adpter的使用总结 之 BaseExpandableListAdapter

    转载请标明出处:http://www.cnblogs.com/tanlon/archive/2011/06/20/2085583.html

    通过前面三篇文章:

    Android 适配器Adapter的学习:http://www.cnblogs.com/tanlon/archive/2011/05/21/2053009.html

    Android 适配器Adpter的使用总结:http://www.cnblogs.com/tanlon/archive/2011/06/20/2084901.html

    Android 适配器Adpter的使用总结 之 CursorAdpter:http://www.cnblogs.com/tanlon/archive/2011/06/20/2085562.html

    我们对Adpter有了较深的理解之后,我们来了解一下BaseExpandableListAdapter也就是二级树ExpandableListView的数据填充器。

    我们应该先了解一下关于BaseExpandableListAdapter中的一些方法的含义和用法:

    http://www.cnblogs.com/over140/archive/2011/01/18/1937921.html

    如我的上篇博文<Android 适配器Adpter的使用总结 之 CursorAdpter>提到的BaseExpandableListAdapter则是实现了ExpandableListAdpter、HeterogeneousExpandableList接口,同理CursorTreeAdapter继承了BaseExpandableListAdapter,并且衍生出了ResourceCusorTreeAdapter,由ResourceCusorTreeAdapter又衍生出了SimpleCursorTreeAdapter。除此之外还有SimpleExpandableListAdapter也是继承自BaseExpandableListAdapter.

    在这里还是以SimpleExpandableListAdapter为例,做一个小demo:

    布局文件:

    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android
    ="http://schemas.android.com/apk/res/android"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent">
    <ExpandableListView android:layout_height="fill_parent"
    android:layout_width
    ="fill_parent" android:id="@+id/expandableListView"/>
    </LinearLayout>
    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android
    ="http://schemas.android.com/apk/res/android"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent"
    android:gravity
    ="center">
    <TextView
    android:id
    ="@+id/expandablelistview_tv"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content"
    android:layout_alignParentRight
    ="true"
    android:text
    ="expandablelistview_tv"
    android:layout_centerVertical
    ="true"
    android:paddingLeft
    ="50dp"
    android:textSize
    ="24dp"
    />
    </RelativeLayout>

    数据填充器:

    View Code
    数据填充对象的构造、数据的封装:
    publicclass ListSimpleExpandableListAdapter extends SimpleExpandableListAdapter{
    private Context context;
    private List<Map<String, String>> groupData =new ArrayList<Map<String, String>>();//装载group数据
    private List<List<Map<String, String>>> childData =new ArrayList<List<Map<String, String>>>();//装载child数据
    privateint expandedGroupLayout;
    privateint collapsedGroupLayout;
    private String[] groupFrom;
    privateint[] groupTo;
    privateint childLayout;
    privateint lastChildLayout;
    private String[] childFrom;
    privateint[] childTo;
    //构造器
    public ListSimpleExpandableListAdapter(Context context,
    List
    <Map<String, String>> groupData, int expandedGroupLayout,
    int collapsedGroupLayout, String[] groupFrom, int[] groupTo,
    List
    <List<Map<String, String>>> childData,
    int childLayout, int lastChildLayout, String[] childFrom,
    int[] childTo) {
    super(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom,
    groupTo, childData, childLayout, lastChildLayout, childFrom, childTo);
    // TODO Auto-generated constructor stub
    this.context=context;
    this.groupData=groupData;
    this.childData=childData;
    this.expandedGroupLayout=expandedGroupLayout;
    this.collapsedGroupLayout=collapsedGroupLayout;
    this.groupFrom=groupFrom;
    this.groupTo=groupTo;
    this.childLayout=childLayout;
    this.lastChildLayout=lastChildLayout;
    this.childFrom=childFrom;
    this.childTo=childTo;

    }

    //获取group对象
    @Override
    public Object getGroup(int groupPosition) {
    // TODO Auto-generated method stub
    return groupData;
    }

    //获取group对象的数量
    @Override
    publicint getGroupCount() {
    // TODO Auto-generated method stub
    return groupData.size();
    }

    //获取group的id
    @Override
    publiclong getGroupId(int groupPosition) {
    // TODO Auto-generated method stub
    return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
    View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    GroupHolder groupHolder;
    if(convertView==null){
    convertView
    =LayoutInflater.from(context).inflate(expandedGroupLayout, null);
    groupHolder
    =new GroupHolder();
    // groupHolder.imageView=(ImageView) convertView.findViewById(R.id.expandablelistview_iv);
    groupHolder.textView=(TextView) convertView.findViewById(R.id.expandablelistview_tv);
    convertView.setTag(groupHolder);
    }
    else{
    groupHolder
    =(GroupHolder) convertView.getTag();
    }
    // groupHolder.imageView.setImageResource(Integer.parseInt(groupData.get(groupPosition).get(groupFrom[0]).toString()));
    groupHolder.textView.setText(groupData.get(groupPosition).get(groupFrom[1]).toString());
    return convertView;
    }

    //子节点是否被选中
    @Override
    publicboolean isChildSelectable(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    returntrue;
    }

    //获取子节点的数量
    @Override
    publicint getChildrenCount(int groupPosition) {
    // TODO Auto-generated method stub
    return childData.get(groupPosition).size();
    }

    //获取子节点对象
    @Override
    public Object getChild(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return childData.get(groupPosition).get(childPosition);
    }

    //获取子节点id
    @Override
    publiclong getChildId(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,
    boolean isLastChild, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ChildHolder childHolder;
    if(convertView==null){
    convertView
    =LayoutInflater.from(context).inflate(childLayout, null);
    childHolder
    =new ChildHolder();
    childHolder.imageView
    =(ImageView) convertView.findViewById(R.id.listitem_pic);
    childHolder.title
    =(TextView) convertView.findViewById(R.id.listitem_title);
    childHolder.content
    =(TextView) convertView.findViewById(R.id.listitem_content);
    convertView.setTag(childHolder);
    }
    else{
    childHolder
    =(ChildHolder) convertView.getTag();
    }
    childHolder.imageView.setImageResource(Integer.parseInt(childData.get(groupPosition).get(childPosition).get(childFrom[
    0]).toString()));
    childHolder.title.setText(childData.get(groupPosition).get(childPosition).get(childFrom[
    1]).toString());
    childHolder.content.setText(childData.get(groupPosition).get(childPosition).get(childFrom[
    2]).toString());
    return convertView;
    }

    class GroupHolder{
    ImageView imageView;
    TextView textView;
    }

    class ChildHolder{
    ImageView imageView;
    TextView title;
    TextView content;
    }
    }
    View Code
    publicclass ListSimpleExpandableList extends Activity{
    privatestaticfinal String ICON="ICON";
    privatestaticfinal String NAME ="NAME";
    privatestaticfinal String IS_EVEN ="IS_EVEN";

    private ExpandableListAdapter mAdapter;
    private ExpandableListView expandableListView;
    protectedvoid onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.groupexpandablelist);
    List
    <Map<String, String>> groupData =new ArrayList<Map<String, String>>();
    List
    <List<Map<String, String>>> childData =new ArrayList<List<Map<String, String>>>();
    for (int i =0; i <20; i++) {
    Map
    <String, String> curGroupMap =new HashMap<String, String>();
    groupData.add(curGroupMap);
    curGroupMap.put(ICON, String.valueOf(R.drawable.icon));
    curGroupMap.put(NAME,
    "Group "+ i);
    curGroupMap.put(IS_EVEN, (i
    %2==0) ?"This group is even" : "This group is odd");

    List
    <Map<String, String>> children =new ArrayList<Map<String, String>>();
    for (int j =0; j <15; j++) {
    Map
    <String, String> curChildMap =new HashMap<String, String>();
    curChildMap.put(ICON, String.valueOf(R.drawable.icon));
    curChildMap.put(NAME,
    "Child "+ j);
    curChildMap.put(IS_EVEN, (j
    %2==0) ?"This child is even" : "This child is odd");
    children.add(curChildMap);
    }
    childData.add(children);
    }
    expandableListView
    =(ExpandableListView) findViewById(R.id.expandableListView);
    mAdapter
    =new ListSimpleExpandableListAdapter(this, groupData, R.layout.groupexpandablelist_item, 0, new String[] { ICON ,NAME, IS_EVEN }, null, childData, R.layout.listsimple_item, 0, new String[] { ICON ,NAME, IS_EVEN }, null);
    expandableListView.setAdapter(mAdapter);
    //传入null则是消除箭头,如果想替换成自己的图标则传入一个drawable即可
    // this.expandableListView.setGroupIndicator(null);
    }

    }
    有什么不对的地方还望大牛多多指教!
    相关代码发布在QQ群:Android中高级技术免费培训QQ群(118949422)
    很晚了,睡觉去了,明天有机会再写。
  • 相关阅读:
    python第八课
    python第七课
    python第六课
    python第五课
    Python基础30类-内置函数实现迭代器协议
    Python基础29类-内置函数(__format__,__slots__,__doc__,__module__,__del__,__call__)
    Python基础28类-内置函数(__getattribute__,__getitem__,__setitem__.__delittem__)
    Python基础27类-包装、组合方式授权、判断对象类型的方法
    Python基础26类-内置函数__setattr__,__getattr__,__delattr__
    Python基础25类-反射
  • 原文地址:https://www.cnblogs.com/tanlon/p/2085583.html
Copyright © 2011-2022 走看看