第七十七讲:用户界面View之ExpandableListView

生活是一面镜子。你对它笑,它就对你笑;你对它哭,它也对你哭。

本讲内容:ExpandableListView 多级列表

下面我们通过一个例子感受一下

下面是res/layout/activity_main.xml 布局文件:

<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:background="@drawable/default_bg"
    tools:context="com.example.expandablelistview.MainActivity$PlaceholderFragment" >

    <ExpandableListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true">
    </ExpandableListView>

</RelativeLayout>

下面是res/layout/member_listview.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_gravity="center_horizontal" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/ImageView01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:paddingTop="10dp"
            android:src="@drawable/user_group" />

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/tv01"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:textSize="25sp"
                android:textColor="#fff"
                android:gravity="center_vertical"
                android:layout_gravity="center_vertical"
                android:paddingLeft="10dp"/>

            <ImageView
                android:id="@+id/tubiao"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"/>

        </RelativeLayout>

    </LinearLayout>

</LinearLayout>

下面是res/layout/member_childitem.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/childlayout"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/child_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/child_image"
        android:paddingTop="7dp"
        android:layout_marginLeft="40dp"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/child_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="17sp"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"/>
        <TextView
            android:id="@+id/child_text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"/>

    </LinearLayout>

</LinearLayout>

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity {
	private static final String G_TEXT = "g_text";
	private static final String C_TEXT1 = "c_text1";
	private static final String C_TEXT2 = "c_text2";

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

	ExAdapter adapter;
	ExpandableListView exList;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("溪坎中學");

		for (int i = 0; i < 3; i++) {
			Map<String, String> groupMap = new HashMap<String, String>();
			groupData.add(groupMap);
			// groupMap.put(G_TEXT, "Group"+i);
			if (i == 0) {
				groupMap.put(G_TEXT, "一八班");
			} else if (i == 1) {
				groupMap.put(G_TEXT, "二四班");
			} else if (i == 2) {
				groupMap.put(G_TEXT, "三三班");
			}

			List<Map<String, String>> children = new ArrayList<Map<String, String>>();
			for (int j = 0; j < 5; j++) {
				Map<String, String> childMap = new HashMap<String, String>();
				children.add(childMap);
				if (j == 0) {
					childMap.put(C_TEXT1, "丹妹");
					childMap.put(C_TEXT2, "舍与得,留下的,珍惜。");
				} else if (j == 1) {
					childMap.put(C_TEXT1, "四眼妹");
					childMap.put(C_TEXT2, "太平洋保险,人寿保险,财产保险");
				} else if (j == 2) {
					childMap.put(C_TEXT1, "冯开妥");
					childMap.put(C_TEXT2, "哪一刻,心~停止跳动。");
				} else if (j == 3) {
					childMap.put(C_TEXT1, "郑健美 ");
					childMap.put(C_TEXT2, "爱情就是赌局,谁先爱上谁,谁就输了,我只愿意输一次");
				} else if (j == 4) {
					childMap.put(C_TEXT1, "黄小君");
					childMap.put(C_TEXT2, "挤不进的世界,就别挤了,何苦为难别人,苦了自己。");
				}
			}
			childData.add(children);
		}

		adapter = new ExAdapter(MainActivity.this);
		exList = (ExpandableListView) findViewById(R.id.list);
		exList.setAdapter(adapter);
		exList.setGroupIndicator(null);
		exList.setDivider(null);
	}

	class ExAdapter extends BaseExpandableListAdapter {
		Context context;

		public ExAdapter(Context context) {
			context = this.context;
		}

		public View getGroupView(int groupPosition, boolean isExpanded,
				View convertView, ViewGroup parent) {
			View view = convertView;
			if (view == null) {
				LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				view = inflater.inflate(R.layout.member_listview, null);
			}

			TextView title = (TextView) view.findViewById(R.id.tv01);// 记得加view否则报错
			title.setText(getGroup(groupPosition).toString());

			ImageView image = (ImageView) view.findViewById(R.id.tubiao);
			if (isExpanded) {
				image.setBackgroundResource(R.drawable.btn_browser2);
			} else {
				image.setBackgroundResource(R.drawable.btn_browser);
			}
			return view;
		}

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

		public Object getGroup(int groupPosition) {
			return groupData.get(groupPosition).get(G_TEXT).toString();
		}

		public int getGroupCount() {
			return groupData.size();

		}

		public View getChildView(int groupPosition, int childPosition,
				boolean isLastChild, View convertView, ViewGroup parent) {
			View view = convertView;
			if (view == null) {
				LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				view = inflater.inflate(R.layout.member_childitem, null);
			}
			final TextView title = (TextView) view.findViewById(R.id.child_text);
			title.setText(childData.get(groupPosition).get(childPosition).get(C_TEXT1).toString());
			final TextView title2 = (TextView) view.findViewById(R.id.child_text2);
			title2.setText(childData.get(groupPosition).get(childPosition).get(C_TEXT2).toString());

			return view;
		}

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

		public Object getChild(int groupPosition, int childPosition) {
			return childData.get(groupPosition).get(childPosition).get(C_TEXT1).toString();
		}

		public int getChildrenCount(int groupPosition) {
			return childData.get(groupPosition).size();
		}

		// **************************************
		public boolean hasStableIds() {
			return true;
		}

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

	}
}

本讲就到这里,Take your time and enjoy it

时间: 2024-11-10 14:12:06

第七十七讲:用户界面View之ExpandableListView的相关文章

第十七讲 继承

第十七讲 A)构造方法的重载:只需看参数即可.如果想在一个构造方法中调用另外一个构造方法,那么可以用this()的方式调用,this()括号中的参数表示目标构造方法的参数.this()必须要作为构造方法的第一条语句. B)继承:Java是单继承的,意味着一个类只能继承另一个类,继承使用extends关键字. C)当生成子类对象时,会默认先调用父类的不带参数的构造方法,生成父类对象,再执行该子类的构造方法,生成子类对象. D)如果子类的构造方法想调用调用父类的构造方法,可以用super()来显式调

【leetcode 简单】 第七十七题 单词模式

给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式. 示例1: 输入: pattern = "abba", str = "dog cat cat dog" 输出: true 示例 2: 输入:pattern = "abba", str = "dog cat cat fish&

第七十八讲:用户界面View之PopupWindow

命运掌握在自己手中.要么你驾驭生命,要么生命驾驭你,你的心态决定你是坐骑还是骑手. 本讲内容:PopupWindow 弹出窗口控件 一.PopupWindow 弹出窗口控件认识 1.Android的对话框有两种:PopupWindow和AlertDialog. 2.它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意 AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的 3.PopupWindow的位置按照有无偏移分,可以分为偏移和无

第四十七讲:用户界面View之Chronometer

众里寻她千百度,蓦然回首,那人却在灯火阑珊处.--宋辛弃疾青玉案 本讲内容:Chronometer 定时器 Chronometer是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间,它将会使用你的时间通话开始.默认情况下它会显示在当前定时器的值的形式"分:秒"或"H:MM:SS的",或者可以使用的Set(字符串)格式的定时器值到一个任意字符串 一.常用属性 android:format:定义时间的格式如:hh:mm:ss 二.常用方

第二十四讲:用户界面View之Gallery

生活就像海洋,只有意志坚强的人,才能到达彼岸. -- 马克思 本讲内容:Gallery 画廊 Gallery是一个内部元素可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局组件. 我们通过一个例子感受一下,代码的讲解都写在注释里了 下面是res/layout/activity_main.xml 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools

用户界面View之ViewGroup

没有目标的人永远为有目标的人去努力. 本讲内容:ViewGroup (一组视图) 一.ViewGroup 的介绍 View(视图)是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,ViewGroup继承于View.ViewGroup是抽象类,不能直接使用它.Linearlayout等布局都是ViewGroup实现类. 二.LayoutParams 类 LayoutParams继承于ViewGroup.LayoutParams相当于一个Layout的信息包,它封装了Layout的位置

第二十七讲:Android之Animation(二)

勿以恶小而为之,勿以善小而不为.惟贤惟德,能服于人.-- 刘  备 本讲内容:Animation 动画 一.Interpolator 插值器 (定义动画变化的速率)         我们也可以自定义的插值器 Interpolator对象 资源ID 功能作用 AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 先加速再减速 AccelerateInterpolator @android:

第一百七十七节,jQuery,知问前端--概述及 jQuery UI

jQuery,知问前端--概述及 jQuery UI 学习要点: 1.项目介绍 2.jQuery UI 3.UI 主题 一.项目介绍 我们重点仿照"知乎"的架构模式来搭建界面和布局,以及大部分前端功能.而"百度 知道"作为辅助功能来确定我们这个项目需要的前端功能. 从以上知名问答站点中,我们可以确认最主要的前端功能:1.弹出对话框:2.前端按钮: 3.折叠菜单:4.选项卡切换:5.滑动块:6.日历:7.自动补全:8 拖放:等一系列前端模块. 二.jQuery UI

UI第十七讲.图片异步加载(包括第三方), KVO, KVC

一.异步下载图片二.UITableView中图片的异步下载 示例代码: 图片解析,并利用第三方方法对图片进行异步加载 #import "ViewController.h" #import "TableViewCell.h" #import "NetWorkHandle.h" #import "Model.h" #import "UIImageView+WebCache.h" @interface ViewC