【Android应用界面编程】-----ExpendableListView

来源:互联网 发布:snip mac 编辑:程序博客网 时间:2024/05/16 06:15

一、知识点

1、ExpandableListView是LIstView的子类,它在普通ListView的基础上进行了 扩展,它把应用的列表项分成了几组,每组又可包含多个列表项。
2、ExpandablelistView 的用法与普通的ListView的 用法相似,只是ExpandableListView所显示的列表项应该由ExpandableListAdapter提供,实现ExpandablelistAdaptery有如下三种常用方式:
  • 扩展BaseExpandableListAdapter实现ExpandableListAdapter
  • 使用SimpleExpandableListAdapter将两个List集合包装成ExpandableListAdapter
  • 使用SimpleExpandableListAdapter将Cursor中的数据包装成SimpleCursorTreeAdapter
3、调用BaseExpandableListAdapter需要重写的10个方法
  • public Object getChild(int groupPosition, int childPosition)
  • 获取指定组中的指定子元素数据。返回值,返回指定子元素数据。
  • public long getChildId(int groupPosition, int childPosition)
  • 获取指定组中的指定子元素ID,这个ID在组里一定是唯一的。
  • public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,ViewGroup parent) 
  • 获取一个视图对象,显示指定组中的指定子元素数据。
  • public int getChildrenCount(int groupPosition) 
  • 获取指定组中的子元素个数   

  • public abstract int getGroupCount () 
  • 获取组的个数,返回值:组的个数
  • public Object getGroup (int groupPosition) 
  • 获取指定组中的数据 
  • public long getGroupId (int groupPosition) 
  • 获取指定组的ID,这个组ID必须是唯一的。
  • public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
  • 获取显示指定组的视图对象。
  • public boolean isChildSelectable(int groupPosition, int childPosition)
  •  是否选中指定位置上的子元素。
  • public boolean hasStableIds()
  • 组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。返回值:返回一个Boolean类型的值,如果为TRUE,意味着相同的ID永远引用相同的对象

二、实战

1、效果图

2、demo结构

3、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:orientation="vertical" >    <ExpandableListView        android:id="@+id/list"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:childIndicator="@drawable/ic_launcher" >    </ExpandableListView></LinearLayout>



4、主文件代码
package com.baiyu.expandablelisteview;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;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 MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ExpandableListAdapter adapter = new BaseExpandableListAdapter() {int[] type = new int[] { R.drawable.black, R.drawable.family, R.drawable.friend };private String[] armTypes = new String[] { "家人", "朋友", "黑名单" };private String[][] arms = new String[][] { { "爸爸", "妈妈", "小妹", "姐姐" }, { "小狗", "秦青", "肖肖", "默默" },{ "老王", "陌生人", "前女友", "前男友" } };// 获取指定组位置,指定子列表项的子列表数据@Overridepublic Object getChild(int groupPosition, int childPosition) {return arms[groupPosition][childPosition];}// 返回子列表的id@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}// 该方法决定每个子选项的外观@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,ViewGroup parent) {TextView textView = new TextView(MainActivity.this);textView.setText(getChild(groupPosition, childPosition).toString());textView.setTextSize(21);textView.setTextColor(Color.BLACK);// 距离左边50textView.setPadding(50, 0, 0, 0);return textView;}// 返回列表的长度@Overridepublic int getChildrenCount(int groupPosition) {return arms[groupPosition].length;}// 获得指定组位置的组数据@Overridepublic Object getGroup(int groupPosition) {return armTypes[groupPosition];}// 获得组的长度@Overridepublic int getGroupCount() {return armTypes.length;}// 获得组指定组的ID@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}// 该方法决定每个组选项的外观@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {LinearLayout layout = new LinearLayout(MainActivity.this);ImageView logo = new ImageView(MainActivity.this);logo.setImageResource(type[groupPosition]);// 距离顶部20logo.setPadding(0, 20, 0, 0);layout.addView(logo);TextView textView = new TextView(MainActivity.this);textView.setText(getGroup(groupPosition).toString());textView.setTextSize(25);textView.setTextColor(Color.GRAY);layout.addView(textView);return layout;}// 组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。// 返回值:返回一个Boolean类型的值,如果为TRUE,意味着相同的ID永远引用相同的对象@Overridepublic boolean hasStableIds() {return false;}// 是否选中指定位置上的子元素。@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return false;}};ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.list);//设置适配器expandableListView.setAdapter(adapter);}}


1 0
原创粉丝点击