android ExpandableListView详解

本文介绍如何使用 Android 的 ExpandableListView 控件来创建可展开和折叠的列表视图,并提供了一个具体的示例代码,展示了如何设置数据适配器、处理点击事件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android ExpandableListView可以实现像QQ那样收缩的列表,这里贴出一些用法。

重要方法:

01 expandGroup (int groupPos) ;//在分组列表视图中 展开一组,
02 setSelectedGroup (int groupPosition) ;//设置选择指定的组。
03  
04 setSelectedChild (int groupPosition, int childPosition, boolean shouldExpandGroup);//设置选择指定的子项。
05  
06 getPackedPositionGroup (long packedPosition);//返回所选择的组
07  
08 getPackedPositionForChild (int groupPosition, int childPosition) ;//返回所选择的子项
09  
10 getPackedPositionType (long packedPosition);//返回所选择项的类型(Child,Group)
11  
12 isGroupExpanded (int groupPosition);//判断此组是否展开

 expandableListView.setDivider();这个是设定每个Group之间的分割线。

  expandableListView.setGroupIndicator();这个是设定每个Group之前的那个图标。

  expandableListView.collapseGroup(int group); 将第group组收起


这里贴出一个完整的例子:

public class MainActivity extends Activity {

	//标题
	private String tile[] = { "我的好友", "我的同学" };
	//展开内容
	private String childdren[][] = {
			{ "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网", "李四网",
					"李四网", "李四网", "李四网", "张三", "李四", "王麻子", "李四", "李四" }, { "张三", "李四", "王麻子", "李四", "李四" } };

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

		ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.list);
		//设置头的展开图标
		expandableListView.setGroupIndicator(null);

		final ExpandableListAdapter adapter = new ExpandableListAdapter() {

			@Override
			public void unregisterDataSetObserver(DataSetObserver observer) {
				// TODO Auto-generated method stub

			}

			@Override
			public void registerDataSetObserver(DataSetObserver observer) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGroupExpanded(int groupPosition) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGroupCollapsed(int groupPosition) {
				// TODO Auto-generated method stub

			}

			@Override
			public boolean isEmpty() {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public boolean isChildSelectable(int groupPosition, int childPosition) {
				// TODO Auto-generated method stub
				return true;
			}

			@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(0);
				//设置头像
				ImageView logo = new ImageView(MainActivity.this);
				logo.setImageResource(R.drawable.ic_launcher);
				logo.setPadding(50, 0, 0, 0);
				layout.addView(logo);
				//设置文字
				TextView textView = new TextView(MainActivity.this);
				textView.setTextColor(Color.BLACK);
				textView.setText(getGroup(groupPosition).toString());
				layout.addView(textView);
				return layout;
			}

			@Override
			public long getGroupId(int groupPosition) {
				// TODO Auto-generated method stub
				return groupPosition;
			}

			@Override
			public int getGroupCount() {
				// TODO Auto-generated method stub
				return tile.length;
			}

			@Override
			public Object getGroup(int groupPosition) {
				// TODO Auto-generated method stub
				return tile[groupPosition];
			}

			@Override
			public long getCombinedGroupId(long groupId) {
				// TODO Auto-generated method stub
				return groupId;
			}

			@Override
			public long getCombinedChildId(long groupId, long childId) {
				// TODO Auto-generated method stub
				return 0;
			}

			@Override
			public int getChildrenCount(int groupPosition) {
				// TODO Auto-generated method stub
				return childdren[groupPosition].length;
			}

			@Override
			public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
					ViewGroup parent) {
				LinearLayout ll = new LinearLayout(MainActivity.this);
				ll.setOrientation(0);
				//加入头像
				ImageView generallogo = new ImageView(MainActivity.this);

				generallogo.setImageResource(R.drawable.ic_launcher);
				ll.addView(generallogo);
				//加入名字
				TextView textView = new TextView(MainActivity.this);
				LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
				textView.setLayoutParams(params);
				textView.setTextColor(Color.BLACK);
				textView.setGravity(Gravity.CENTER);
				textView.setText(getChild(groupPosition, childPosition).toString());
				ll.addView(textView);
				return ll;

			}

			@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 childdren[groupPosition][childPosition];
			}

			@Override
			public boolean areAllItemsEnabled() {
				// TODO Auto-generated method stub
				return false;
			}
		};

		expandableListView.setAdapter(adapter);

		expandableListView.setOnChildClickListener(new OnChildClickListener() {

			@Override
			public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "你点击了" + adapter.getChild(groupPosition, childPosition),
						Toast.LENGTH_SHORT).show();
				return false;
			}
		});
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值