Android ExpandableListView的使用

一、MainActivity要继承ExpandableListActivity。效果是当单击ListView的子项是显示另一个ListView。

package com.example.explear;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



import android.app.Activity;

import android.app.ExpandableListActivity;

import android.os.Bundle;

import android.transition.SidePropagation;

import android.widget.SimpleExpandableListAdapter;



public class MainActivity extends ExpandableListActivity {

    private static final String NAME = "NAME";

    private static final String IS_EVEN = "IS_EVEN";

    private SimpleExpandableListAdapter eListAdapter;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);



        List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();

        List<List<Map<String, String>>> childDataList = new ArrayList<List<Map<String, String>>>();

        for (int i = 0; i < 10; i++) {

            Map<String, String> curGroupMap = new HashMap<String, String>();

            groupData.add(curGroupMap);

            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 < 8; j++) {

                Map<String, String> curChildMap = new HashMap<String, String>();

                children.add(curChildMap);

                curChildMap.put(NAME, "Child" + i);

                curChildMap.put(IS_EVEN, (i % 2 == 0) ? "This chile is even"

                        : "this chile is odd");

            }

            childDataList.add(children);

        }

        eListAdapter = new SimpleExpandableListAdapter(this, groupData,

                android.R.layout.simple_expandable_list_item_2, new String[] {

                        NAME, IS_EVEN }, new int[] { android.R.id.text1,

                        android.R.id.text2 }, childDataList,

                android.R.layout.simple_expandable_list_item_2, new String[] {

                        NAME, IS_EVEN }, new int[] { android.R.id.text1,

                        android.R.id.text2 });

        setListAdapter(eListAdapter);

    }

}

 

1、groupData是父数据 ,childDataList是子数据。

2、android.R.layout.simple_expandable_list_item_2表示list的实现方式

3、new String[] { NAME,IS_EVEN} list需要显示的数据的键值,真正显示的是键对应的值

效果图:

Android ExpandableListView的使用

 

二、数据源:SimpleCursorTreeAdapter的使用

package com.example.explear;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



import android.app.Activity;

import android.app.ExpandableListActivity;

import android.content.ContentUris;

import android.content.Context;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.Contacts.People;

import android.transition.SidePropagation;

import android.widget.ExpandableListAdapter;

import android.widget.SimpleCursorTreeAdapter;

import android.widget.SimpleExpandableListAdapter;



public class MainActivity extends ExpandableListActivity {

    private int mGroupIdColumnIndex;

    private String mPhoneNumberProjection[] = new String[] { People.Phones._ID,

            People.Phones.NUMBER };



    private ExpandableListAdapter mAdapter;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);



        // 搜索

        Cursor groupCursor = managedQuery(People.CONTENT_URI, new String[] {

                People._ID, People.NAME }, null, null, null);

        // 创建ID 列索引

        mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID);



        // 创建adapter

        mAdapter = new MyExpandableListAdapter(groupCursor, this,

                android.R.layout.simple_expandable_list_item_1,

                android.R.layout.simple_expandable_list_item_1,

                new String[] { People.NAME }, new int[] { android.R.id.text1 },

                new String[] { People.NUMBER },

                new int[] { android.R.id.text1 });

        setListAdapter(mAdapter);

    };



    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {

        public MyExpandableListAdapter(Cursor cursor, Context context,

                int groupLayout, int childLayout, String[] groupFrom,

                int[] groupTo, String[] childrenFrom, int[] childrenTo) {

            super(context, cursor, groupLayout, groupFrom, groupTo,

                    childLayout, childrenFrom, childrenTo);

        }



        @Override

        protected Cursor getChildrenCursor(Cursor groupCursor) {

            // 传进来一个组,返回一个对组内所有子组的cursor

            // 返回一个指向这个联系人电话的箭头

            Uri.Builder builder = People.CONTENT_URI.buildUpon();

            ContentUris.appendId(builder,

                    groupCursor.getLong(mGroupIdColumnIndex));

            builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY);

            Uri phoneNumberUri = builder.build();



            return managedQuery(phoneNumberUri, mPhoneNumberProjection, null,

                    null, null);



        }

    }

}

效果图

Android ExpandableListView的使用

三、通过BaseExpandableListAdapter绑定数据

 activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.explear.MainActivity" >



    <TextView

        android:id="@+id/textView1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="TextView" />



    <ExpandableListView

        android:id="@android:id/list"

        android:layout_width="match_parent"

        android:layout_height="0dp"

        android:layout_weight="1" >

    </ExpandableListView>



</LinearLayout>

注意这里的ExpandableListView的id设置需要使用@android:id/list,否则会报

Your content must have a ExpandableListView whose id attribute is 'android.R.id.list'错误

package com.example.explear;



import android.R.anim;

import android.app.ExpandableListActivity;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;



public class MainActivity extends ExpandableListActivity {

    private String[] groups = { "group1", "group2", "group3", "group4" };

    private String[][] children = {

            { "g1 item1", "g1 item2", "g1 item3", "g1 item4" },

            { "g2 item1", "g2 item2", "g2 item3", "g2 item4" },

            { "g3 item1", "g3 item2" }, { "g4 item1", "g4 item2" } };



    private ExpandableListView expandableListView;

    private TextView tView = null;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tView = (TextView) findViewById(R.id.textView1);

        expandableListView = (ExpandableListView) findViewById(android.R.id.list);



        BaseExpandableListAdapter adapter = new BaseExpandableListAdapter() {



            @Override

            public boolean isChildSelectable(int groupPosition,

                    int childPosition) {

                String string = groups[groupPosition]

                        + children[groupPosition][childPosition];

                tView.setText(string);

                return true;

            }



            @Override

            public boolean hasStableIds() {

                return false;

            }



            @Override

            public View getGroupView(int groupPosition, boolean isExpanded,

                    View convertView, ViewGroup parent) {

                LinearLayout layout = new LinearLayout(MainActivity.this);

                layout.setOrientation(0);

                layout.setPadding(50, 0, 0, 0);

                ImageView imageView = new ImageView(MainActivity.this);

                imageView.setImageResource(R.drawable.ic_launcher);

                layout.addView(imageView);



                TextView textView = getTextView();

                textView.setText(getGroup(groupPosition).toString());

                layout.addView(textView);

                return layout;

            }



            @Override

            public long getGroupId(int groupPosition) {

                return groupPosition;

            }



            @Override

            public int getGroupCount() {

                return groups.length;

            }



            @Override

            public Object getGroup(int groupPosition) {

                return groups[groupPosition];

            }



            @Override

            public int getChildrenCount(int groupPosition) {

                return children[groupPosition].length;

            }



            @Override

            public View getChildView(int groupPosition, int childPosition,

                    boolean isLastChild, View convertView, ViewGroup parent) {

                TextView textView = getTextView();

                textView.setText(getChild(groupPosition, childPosition)

                        .toString());



                return textView;

            }



            @Override

            public long getChildId(int groupPosition, int childPosition) {

                return childPosition;

            }



            @Override

            public Object getChild(int groupPosition, int childPosition) {

                return children[groupPosition][childPosition];

            }

        };

        expandableListView.setAdapter(adapter);

    }



    protected TextView getTextView() {

        AbsListView.LayoutParams lParams = new AbsListView.LayoutParams(

                ViewGroup.LayoutParams.MATCH_PARENT, 64);

        TextView textView = new TextView(MainActivity.this);

        textView.setLayoutParams(lParams);

        textView.setPadding(20, 0, 0, 0);

        textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);

        return textView;

    }

}

效果图:

Android ExpandableListView的使用

 

你可能感兴趣的:(Android ExpandableListView的使用)