ExpandableListView——可展开的列表组件

ExpandableListView所显示的列表项应该由ExpandableAdapter提供

ExpandableListView所额外支持的常用xml属性:

xml属性 说明
android:childDivider 指定各组内各子列表项之间的分割条
android:childIndicator 显示在子列表项旁边的Drawable对象
android:groupIndicator 显示在组列表项旁边的Drawable对象

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ExpandableListView
    android:id="@+id/list"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:childIndicator="@drawable/icon"
    />
</LinearLayout>
package org.crazyit.listview;

import android.app.Activity;
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.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ExpandableListViewTest extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //创建一个BaseExpandableListAdapter对象
        ExpandableListAdapter adapter = new BaseExpandableListAdapter()
        {
            int[] logos = new int[]
            {
                R.drawable.p,
                R.drawable.z,
                R.drawable.t
            };
             private String[] armTypes = new String[]
                { "神族兵种", "虫族兵种", "人族兵种"};
            private String[][] arms = new String[][]
            {
                { "狂战士", "龙骑士", "黑暗圣堂", "电兵" },
                { "小狗", "刺蛇", "飞龙", "自爆飞机" },
                { "机枪兵", "护士MM" , "幽灵" }
            };
            //获取指定组位置、指定子列表项处的子列表项数据
            @Override
            public Object getChild(int groupPosition, int childPosition)
            {
                return arms[groupPosition][childPosition];
            }
            @Override
            public long getChildId(int groupPosition, int childPosition)
            {
                return childPosition;
            }
            @Override
            public int getChildrenCount(int groupPosition)
            {
                return arms[groupPosition].length;
            }
            private TextView getTextView()
            {
                AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                        ViewGroup.LayoutParams.FILL_PARENT, 64);
                TextView textView = new TextView(ExpandableListViewTest.this);
                textView.setLayoutParams(lp);
                textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
                textView.setPadding(36, 0, 0, 0);
                textView.setTextSize(20);
                return textView;
            }
            //该方法决定每个子选项的外观
            @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 Object getGroup(int groupPosition)
            {
                return armTypes[groupPosition];
            }
            @Override
            public int getGroupCount()
            {
                return armTypes.length;
            }
            @Override
            public long getGroupId(int groupPosition)
            {
                return groupPosition;
            }
            //该方法决定每个组选项的外观
            @Override
            public View getGroupView(int groupPosition, boolean isExpanded,
                    View convertView, ViewGroup parent)
            {
                LinearLayout ll = new LinearLayout(ExpandableListViewTest.this);
                ll.setOrientation(0);
                ImageView logo = new ImageView(ExpandableListViewTest.this);
                logo.setImageResource(logos[groupPosition]);
                ll.addView(logo);
                TextView textView = getTextView();
                textView.setText(getGroup(groupPosition).toString());                
                ll.addView(textView);            
                return ll;
            }
            @Override
            public boolean isChildSelectable(int groupPosition, int childPosition)
            {
                return true;
            }
            @Override
            public boolean hasStableIds()
            {
                return true;
            }
        };
        ExpandableListView expandListView = (ExpandableListView)
            findViewById(R.id.list);
        expandListView.setAdapter(adapter);
    }
}

 

posted @ 2016-04-10 13:28  沉默的羊癫疯  阅读(102)  评论(0编辑  收藏  举报