【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
- 【Android应用界面编程】-----ExpendableListView
- Android应用界面编程
- android应用界面编程
- android expendableListView教程
- Android ExpendableListView的使用
- Android应用的界面编程
- android应用的界面编程
- Android应用的界面编程
- Android应用的界面编程
- Android应用的界面编程
- Android应用的界面编程
- Android应用的界面编程
- Android应用的界面编程
- android学习——应用界面编程
- Android应用界面编程 ImageView学习
- Android应用的界面编程简述1
- Android应用的界面编程(一)
- Android应用的界面编程(一)
- Mnesia动态添加节点杂记
- C Primer Plus6-5
- RecyclerView的简单使用
- iOS开发——MBProgressHUD
- C Primer Plus6-6
- 【Android应用界面编程】-----ExpendableListView
- spring mvc中,如何在 Java 代码里,获取 国际化 内容
- NLS_LANG parameter setting
- C Primer Plus6-7
- C Primer Plus6-8
- CSS-Day03-CSS样式-字体
- 关于redis集群的一些事
- 强引用、软引用、弱引用、虚引用
- include-filter和exclude-filter的区别