ExpandableListView 的用法

xml文件很简单,就是一个ExpandableListView

<RelativeLayout 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: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=".MainActivity" >

    <ExpandableListView
        android:id="@+id/expand_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ExpandableListView>

</RelativeLayout>

下面是java文件,注释很全,

package com.example.expandablelistviewtext;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
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.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity
{

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		ExpandableListAdapter adapter = new BaseExpandableListAdapter()
		{
			int[] logos = new int[] { R.drawable.a, R.drawable.b, R.drawable.c };

			private String[] armTypes = new String[] { "神族兵种", "虫族兵种", "人族兵种" };

			private String[][] arms = new String[][] {
					{ "狂战士", "龙骑士", "黑暗圣堂", "电兵" },
					{ "小狗", "刺蛇", "飞龙", "自爆飞机" }, 
					{ "机枪兵", "护士MM", "幽灵" } };
			

			//子选项是否可以选中 
			@Override
			public boolean isChildSelectable(int groupPosition,
					int childPosition)
			{
				return true;
			}

			/*
			 * Indicates whether the child and group IDs are stable across changes to the underlying data.(non-Javadoc)
			 * 大致说item的id是否稳定,
			 * @see android.widget.ExpandableListAdapter#hasStableIds()
			 */
			@Override
			public boolean hasStableIds()
			{
				// TODO Auto-generated method stub
				return true;
			}

			//该方法决定每个组选项的外观
			@Override
			public View getGroupView(int groupPosition, boolean isExpanded,
					View convertView, ViewGroup parent)
			{
				// TODO Auto-generated method stub
				LinearLayout layout = new LinearLayout(MainActivity.this);
				layout.setOrientation(LinearLayout.HORIZONTAL);
				layout.setGravity(Gravity.CENTER);
				ImageView logo = new ImageView(MainActivity.this);
				logo.setImageResource(logos[groupPosition]);
				layout.addView(logo);
				
				TextView textView = getTextView();
				textView.setText(getGroup(groupPosition).toString());
				layout.addView(textView);
				return layout;
			}

			//返回ID根据被给的 groupPosition
			@Override
			public long getGroupId(int groupPosition)
			{
				// TODO Auto-generated method stub
				return groupPosition;
			}
			//返回群组的个数
			@Override
			public int getGroupCount()
			{
				// TODO Auto-generated method stub
				return armTypes.length;
			}
			//返回关联的数据根据被给的goupPosition
			@Override
			public Object getGroup(int groupPosition)
			{
				// TODO Auto-generated method stub
				return armTypes[groupPosition];
			}
			//返回指定组子项的个数
			@Override
			public int getChildrenCount(int groupPosition)
			{
				// TODO Auto-generated method stub
				return arms[groupPosition].length;
			}

			//该方法决定每个子选项的外观
			@Override
			public View getChildView(int groupPosition, int childPosition,
					boolean isLastChild, View convertView, ViewGroup parent)
			{
				// TODO Auto-generated method stub
				TextView textView = getTextView();
				textView.setText(getChild(groupPosition, childPosition).toString());
				
				return textView;
			}

			//返回Id,根据被给的组和指定组的项
			@Override
			public long getChildId(int groupPosition, int childPosition)
			{
				// TODO Auto-generated method stub
				return childPosition;
			}

			//获取指定数组位置,指定子列表处的子列表项数据
			@Override
			public Object getChild(int groupPosition, int childPosition)
			{
				// TODO Auto-generated method stub
				return arms[groupPosition][childPosition];
			}
			//自定义的私有函数,代码重用 
			private TextView getTextView()
			{
				AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);
				TextView textView = new TextView(MainActivity.this);
				textView.setLayoutParams(lp);
				textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
				textView.setPadding(36, 0, 0, 0);
				return textView;
			}
		};
		ExpandableListView expandListView = (ExpandableListView)findViewById(R.id.expand_list);
		expandListView.setAdapter(adapter);
		//点击子选项监听器,还有 onGroupClickListener等监听器, 在
		expandListView.setOnChildClickListener(new OnChildClickListener()
		{
			
			@Override
			public boolean onChildClick(ExpandableListView parent, View v,
					int groupPosition, int childPosition, long id)
			{
				// TODO Auto-generated method stub
				System.out.println("您点击的是第" + groupPosition + "组" + "第" + childPosition + "行");
				return false;
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

出在 android疯狂讲义例子,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值