Android ExpandableListView 可展开的ListView

效果图



public class TestExpandableListView extends Activity {
	ExpandableListView mView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.expandable_listview);
		
		mView = (ExpandableListView) findViewById(R.id.el_list);
		mView.setAdapter(new MyAdapter());
		
	}
	
	class MyAdapter extends BaseExpandableListAdapter {
		
		 //设置组视图的图片
//        int[] logos = new int[] { R.drawable.wei, R.drawable.shu,R.drawable.wu};
        //设置组视图的显示文字
        private String[] generalsTypes = new String[] { "魏", "蜀", "吴" };
        //子视图显示文字
        private String[][] generals = new String[][] {
                { "夏侯惇", "甄姬", "许褚", "郭嘉", "司马懿", "杨修" },
                { "马超", "张飞", "刘备", "诸葛亮", "黄月英", "赵云" },
                { "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" }

        };
        
        //子视图图片
//        public int[][] generallogos = new int[][] {
//                { R.drawable.xiahoudun, R.drawable.zhenji,
//                        R.drawable.xuchu, R.drawable.guojia,
//                        R.drawable.simayi, R.drawable.yangxiu },
//                { R.drawable.machao, R.drawable.zhangfei,
//                        R.drawable.liubei, R.drawable.zhugeliang,
//                        R.drawable.huangyueying, R.drawable.zhaoyun },
//                { R.drawable.lvmeng, R.drawable.luxun, R.drawable.sunquan,
//                        R.drawable.zhouyu, R.drawable.sunshangxiang } };

        //自己定义一个获得textview的方法
        TextView getTextView() {
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 100);
            TextView textView = new TextView(TestExpandableListView.this);
            textView.setLayoutParams(lp);
            textView.setGravity(Gravity.CENTER_VERTICAL);
            textView.setPadding(36, 0, 0, 0);
            textView.setTextSize(20);
            textView.setTextColor(Color.BLACK);
            return textView;
        }


		@Override
		public int getGroupCount() {
			return generalsTypes.length;
		}

		@Override
		public int getChildrenCount(int groupPosition) {
			return generals[groupPosition].length;
		}

		@Override
		public Object getGroup(int groupPosition) {
			return generalsTypes[groupPosition];
		}

		@Override
		public Object getChild(int groupPosition, int childPosition) {
			return generals[groupPosition][childPosition];
		}

		@Override
		public long getGroupId(int groupPosition) {
			return groupPosition;
		}

		@Override
		public long getChildId(int groupPosition, int childPosition) {
			return childPosition;
		}

		@Override
		public boolean hasStableIds() {
			return true;
		}

		@Override
		public View getGroupView(int groupPosition, boolean isExpanded,
				View convertView, ViewGroup parent) {
			 LinearLayout ll = new LinearLayout(TestExpandableListView.this);
             ll.setOrientation(0);
//             ImageView logo = new ImageView(ExpandableList.this);
//             logo.setImageResource(logos[groupPosition]);
//             logo.setPadding(50, 0, 0, 0);
//             ll.addView(logo);
             TextView textView = getTextView();
             textView.setTextColor(Color.BLUE);
             textView.setText(getGroup(groupPosition).toString());
             ll.addView(textView);
             ll.setPadding(100, 10, 10, 10);
             return ll;
		}

		@Override
		public View getChildView(int groupPosition, int childPosition,
				boolean isLastChild, View convertView, ViewGroup parent) {
			 LinearLayout ll = new LinearLayout(TestExpandableListView.this);
             ll.setOrientation(0);
//             ImageView generallogo = new ImageView(TestExpandableListView.this);
//             generallogo.setImageResource(generallogos[groupPosition][childPosition]);
//             ll.addView(generallogo);
             TextView textView = getTextView();
             textView.setText(getChild(groupPosition, childPosition).toString());
             ll.addView(textView);
             return ll;
		}

		@Override
		public boolean isChildSelectable(int groupPosition, int childPosition) {
			return true;
		}
		
	}
}

expandable_listview.xml

<?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"
    android:orientation="vertical" >
    <ExpandableListView 
        android:id="@+id/el_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ffffff"
        android:cacheColorHint="#abcdefff"
        android:listSelector="#cdefabdc" 
        >
  <!--       android:cacheColorHint="#00000000",这个设置拖动view时背景色
		android:listSelector="#00000000" ,设置选中时的底色 -->
    </ExpandableListView> 
</LinearLayout>


一些方法说明:

1.  ExpandableListAdapter 

     group和child都有getView方法,即可使用不同的布局,ViewHolder等

     在getView方法的,groupPosition和childPosition 即在两个集合中的位置

2. ExpandableListView 

    getFirstVisiblePosition();
    getLastVisiblePosition();   //返回屏幕最后可见item的位置: 只计算可见view的位置(不含被group 收缩的子view)

   getPackedPositionGroup(getExpandableListPosition(getFirstVisiblePosition()); //返回 首可见项所在group位置

   setOnChildClickListener()   child点击
   setOnGroupClickListener()  group点击

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值