`
hd_yuan
  • 浏览: 12727 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android ExpandableListActivity 学习笔记(转载)

阅读更多
An activity that displays an expandable list of items by binding to a data source implementing the ExpandableListAdapter, and exposes event handlers when the user selects an item.

  即,可扩展的list,单击某个item后,又可显示一个子list。它的数据通过绑定到ExpandableListAdapter或者ExpandableListAdapter的子类上。

示例1—通过SimpelExpandableListAdapter绑定数据:
   1. public class ExpandableList3 extends ExpandableListActivity {  
   2.     private static final String NAME = "NAME";  
   3.     private static final String IS_EVEN = "IS_EVEN";  
   4.       
   5.     private ExpandableListAdapter mAdapter;  
   6.       
   7.     @Override  
   8.     public void onCreate(Bundle savedInstanceState) {  
   9.         super.onCreate(savedInstanceState);  
  10.   
  11.         List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();  
  12.         List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();  
  13.         for (int i = 0; i < 20; i++) {  
  14.             Map<String, String> curGroupMap = new HashMap<String, String>();  
  15.             groupData.add(curGroupMap);  
  16.             curGroupMap.put(NAME, "Group " + i);  
  17.             curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd");  
  18.               
  19.             List<Map<String, String>> children = new ArrayList<Map<String, String>>();  
  20.             for (int j = 0; j < 15; j++) {  
  21.                 Map<String, String> curChildMap = new HashMap<String, String>();  
  22.                 children.add(curChildMap);  
  23.                 curChildMap.put(NAME, "Child " + j);  
  24.                 curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd");  
  25.             }  
  26.             childData.add(children);  
  27.         }  
  28.           
  29.         // Set up our adapter  
  30.         mAdapter = new SimpleExpandableListAdapter(  
  31.                 this,  
  32.                 groupData,  // 存储父list的数据  
  33.                 android.R.layout.simple_expandable_list_item_2, //父list的现实方式  
  34.                 new String[] { NAME,IS_EVEN},                    // 父list需要显示的数据  
  35.             new int[] { android.R.id.text1,android.R.id.text2}, // 父list的数据绑定到的view  
  36.                 childData,                                      //子list的数据  
  37.                 android.R.layout.simple_expandable_list_item_2,  
  38.                 new String[] { NAME, IS_EVEN },  
  39.                 new int[] { android.R.id.text1, android.R.id.text2 }  
  40.                 );  
  41.         setListAdapter(mAdapter);  
  42.     }  
  43.   
  44. }  

注意:android.R.layout.simple_expandable_list_item_1:表示只显示一个TextView的数据,即R.id.text1

          android.R.layout.simple_expandable_list_item_2:表示显示二个TextView的数据,即R.id.text1,R.id,text2

         android.R.layout.simple_expandable_list_item_2.xml(在R.layout中)文件的布局如下:
   1. <?xml version="1.0" encoding="utf-8"?>  
   2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   3.      android:layout_width="fill_parent"  
   4.      android:layout_height="wrap_content"  
   5.      android:orientation="vertical">  
   6.    
   7.      <TextView android:id="@+id/text1"  
   8.          android:textSize="16sp"  
   9.          android:textStyle="bold"  
  10.          android:layout_width="fill_parent"  
  11.          android:layout_height="wrap_content"/>  
  12.    
  13.      <TextView android:id="@+id/text2"  
  14.          android:textSize="16sp"  
  15.          android:layout_width="fill_parent"  
  16.          android:layout_height="wrap_content"/>  
  17.  </LinearLayout>  

示例2—通过SimpleCussorTreeAdapter绑定数据:
# public class ExpandableList2 extends ExpandableListActivity {  
#     private int mGroupIdColumnIndex;   
#       
#     private String mPhoneNumberProjection[] = new String[] {  
#             People.Phones._ID, People.Phones.NUMBER  
#     };  
#   
#       
#     private ExpandableListAdapter mAdapter;  
#       
#         /*  
#          * CursorTreeAdapter's method.  
#          * Gets the Cursor for the children at the given group  
#          * /  
#     @Override  
#     public void onCreate(Bundle savedInstanceState) {  
#         super.onCreate(savedInstanceState);  
#   
#         // Query for people  
#         Cursor groupCursor = managedQuery(People.CONTENT_URI,  
#                 new String[] {People._ID, People.NAME}, null, null, null);  
#   
#         // Cache the ID column index  
#         mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID);  
#   
#         // Set up our adapter  
#         mAdapter = new MyExpandableListAdapter(groupCursor,  
#                 this,  
#                 android.R.layout.simple_expandable_list_item_1,  
#                 android.R.layout.simple_expandable_list_item_1,  
#                 new String[] {People.NAME}, // Name for group layouts  
#                 new int[] {android.R.id.text1},  
#                 new String[] {People.NUMBER}, // Number for child layouts  
#                 new int[] {android.R.id.text1});  
#         setListAdapter(mAdapter);  
#     }  
#   
#     public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {  
#   
#         public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout,  
#                 int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom,  
#                 int[] childrenTo) {  
#             super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom,  
#                     childrenTo);  
#         }  
#   
#   
#         @Override  
#         protected Cursor getChildrenCursor(Cursor groupCursor) {  
#             // Given the group, we return a cursor for all the children within that group   
#   
#             // Return a cursor that points to this contact's phone numbers  
#             Uri.Builder builder = People.CONTENT_URI.buildUpon();  
#             ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));  
#             builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY);  
#             Uri phoneNumbersUri = builder.build();  
#   
#             // The returned Cursor MUST be managed by us, so we use Activity's helper  
#             // functionality to manage it for us.  
#             return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null);  
#         }  
#   
#     }  
# }

示例3—通过BaseExpandableListAdapter绑定数据:
   1. public class ExpandableList1 extends ExpandableListActivity {  
   2.   
   3.     ExpandableListAdapter mAdapter;  
   4.   
   5.     @Override  
   6.     public void onCreate(Bundle savedInstanceState) {  
   7.         super.onCreate(savedInstanceState);  
   8.   
   9.         // Set up our adapter  
  10.         mAdapter = new MyExpandableListAdapter();  
  11.         setListAdapter(mAdapter);  
  12.         // register context menu, when long click the item, it will show a dialog  
  13.         registerForContextMenu(getExpandableListView());  
  14.     }  
  15.   
  16.     @Override  
  17.     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
  18.         menu.setHeaderTitle("Sample menu");  
  19.         menu.add(0, 0, 0, R.string.expandable_list_sample_action);  
  20.     }  
  21.       
  22.     @Override  
  23.     public boolean onContextItemSelected(MenuItem item) {  
  24.         ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();  
  25.   
  26.         String title = ((TextView) info.targetView).getText().toString();  
  27.           
  28.         int type = ExpandableListView.getPackedPositionType(info.packedPosition);  
  29.         if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {  
  30.             int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);   
  31.             int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);   
  32.             Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,  
  33.                     Toast.LENGTH_SHORT).show();  
  34.             return true;  
  35.         } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {  
  36.             int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);   
  37.             Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();  
  38.             return true;  
  39.         }  
  40.           
  41.         return false;  
  42.     }  
  43.   
  44.     /** 
  45.      * A simple adapter which maintains an ArrayList of photo resource Ids.  
  46.      * Each photo is displayed as an image. This adapter supports clearing the 
  47.      * list of photos and adding a new photo. 
  48.      * 
  49.      */  
  50.     public class MyExpandableListAdapter extends BaseExpandableListAdapter {  
  51.         // Sample data set.  children[i] contains the children (String[]) for groups[i].  
  52.         private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };  
  53.         private String[][] children = {  
  54.                 { "Arnold", "Barry", "Chuck", "David" },  
  55.                 { "Ace", "Bandit", "Cha-Cha", "Deuce" },  
  56.                 { "Fluffy", "Snuggles" },  
  57.                 { "Goldy", "Bubbles" }  
  58.         };  
  59.           
  60.         public Object getChild(int groupPosition, int childPosition) {  
  61.             return children[groupPosition][childPosition];  
  62.         }  
  63.   
  64.         public long getChildId(int groupPosition, int childPosition) {  
  65.             return childPosition;  
  66.         }  
  67.   
  68.         public int getChildrenCount(int groupPosition) {  
  69.             return children[groupPosition].length;  
  70.         }  
  71.   
  72.         public TextView getGenericView() {  
  73.             // Layout parameters for the ExpandableListView  
  74.             AbsListView.LayoutParams lp = new AbsListView.LayoutParams(  
  75.                     ViewGroup.LayoutParams.FILL_PARENT, 64);  
  76.   
  77.             TextView textView = new TextView(ExpandableList1.this);  
  78.             textView.setLayoutParams(lp);  
  79.             // Center the text vertically  
  80.             textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);  
  81.             // Set the text starting position  
  82.             textView.setPadding(36, 0, 0, 0);  
  83.             return textView;  
  84.         }  
  85.           
  86.         public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  
  87.                 View convertView, ViewGroup parent) {  
  88.             TextView textView = getGenericView();  
  89.             textView.setText(getChild(groupPosition, childPosition).toString());  
  90.             return textView;  
  91.         }  
  92.   
  93.         public Object getGroup(int groupPosition) {  
  94.             return groups[groupPosition];  
  95.         }  
  96.   
  97.         public int getGroupCount() {  
  98.             return groups.length;  
  99.         }  
 100.   
 101.         public long getGroupId(int groupPosition) {  
 102.             return groupPosition;  
 103.         }  
 104.   
 105.         public View getGroupView(int groupPosition, boolean isExpanded, View convertView,  
 106.                 ViewGroup parent) {  
 107.             TextView textView = getGenericView();  
 108.             textView.setText(getGroup(groupPosition).toString());  
 109.             return textView;  
 110.         }  
 111.   
 112.         public boolean isChildSelectable(int groupPosition, int childPosition) {  
 113.             return true;  
 114.         }  
 115.   
 116.         public boolean hasStableIds() {  
 117.             return true;  
 118.         }  
 119.   
 120.     }  
 121. }  



分享到:
评论

相关推荐

    ExpandableListActivity

    `ExpandableListActivity`是Android开发中的一个关键组件,它属于`ListView`的扩展,能够显示可折叠的子列表项,使得用户界面更加有层次感和交互性。在这个主题下,我们将深入探讨`ExpandableListActivity`的工作...

    ExpandableListActivity例子,自动展开

    通过这个例子,开发者可以学习到如何在Android应用中使用`ExpandableListActivity`展示层次结构数据,并通过`Handler`实现动画效果。这在展示具有多级分类的数据时非常有用,例如日历应用的月份和日期、菜单的分类和...

    Android学习笔记(二五): 多信息显示-ExpandableListView的使用.doc

    本篇笔记将深入探讨如何使用ExpandableListView,以及如何用HashMap作为数据源。 首先,ExpandableListView的核心在于它的数据模型,它由两部分组成:Groups(父项)和Childrens(子项)。每个Group可以包含多个...

    ExpandableListActivity和SimpleExpandableListAdapter的基本使用详解

    `ExpandableListActivity`是Android框架中用于显示层次结构数据的Activity。与传统的`ListActivity`不同,它能够展示多层级的数据,即可以有父项和子项的概念。用户可以通过点击父项来展开或折叠其子项列表,非常...

    Mars Android视频教程的笔记

    本笔记集合了"Mars Android视频教程"的主要知识点,旨在帮助学习者回顾和巩固课程中的核心概念。以下是根据文件名整理出的各章节内容详解: 1. **Animations.doc** - 动画是Android应用中提升用户体验的关键元素。...

    android开发笔记

    ### Android开发笔记知识点详解 #### 第1章 Android简介 **1.1 Android与iPhone** - **Android**: 是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板...

    android安卓笔记

    ### Android 安卓笔记知识点详解 #### Android—基础 ##### 基础—概念 - **控件类之父**:`View`是所有控件的基类,无论是简单的按钮还是复杂的列表视图,都是从这个类派生出来的。 - **基准线**:在英文书写中,...

    PreferenceActivity和ExpandableListActivity的使用

    PreferenceActivity和ExpandableListActivity的使用,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/77773001

    android 的类似于QQ分组的二级列表

    * @see android.app.ExpandableListActivity#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo) */ @Override public void onCreateContextMenu...

    Android仿QQ好友列表实现列表收缩与展开

    import android.app.ExpandableListActivity; import android.os.Bundle; public class MainActivity extends ExpandableListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super...

    Android-ExpandableListView制作时间轴-TimeLine

    在Android中,我们可以使用`ExpandableListActivity`或者普通的`Activity`配合`ExpandableListView`进行布局。数据通常由`ExpandableListAdapter`管理,这个适配器需要实现`BaseExpandableListAdapter`接口。 在...

    android学习实例

    Android控件下拉框,单选按钮,复选框,自动补全,日期控件(支持显示格式:年月,年月日,月日),LauncherActivity的使用,ExpandableListActivity实现二级下拉列表,并且在列表项右边加自定义的图片,实现只展开一个菜单的功能...

    android的ExpandableListView组件.doc

    `ExpandableListView`通常与`ExpandableListActivity`一起使用,就像`ListActivity`与`ListView`的关系一样。 首先,我们需要创建一个包含`ExpandableListView`的布局。在`main.xml`中,你可以看到以下代码: ```...

    android列表控件实现展开、收缩功能

    在我们的示例代码中,我们创建了一个 ActivityMain 类,该类继承自 ExpandableListActivity,并实现了 onCreate()、onCreateContextMenu() 和 onContextItemSelected() 等方法。这些方法负责初始化列表控件、创建上...

    Android支持展开和收缩功能的列表控件[汇编].pdf

    在Android应用开发中,`ExpandableListView`是一个非常有用的控件,它允许用户展示一个可折叠/展开的列表,这种列表通常用于显示层次结构的数据,如目录结构、菜单或者RSS阅读器中的文章分类。在这个例子中,我们...

    Android应用源码之expandableList1_expandableList.zip

    在Android开发中,ExpandableListView是一个非常重要的控件,它允许用户展示数据集,并且以可...这不仅涉及到基本的UI布局,还涵盖了数据处理、事件监听和性能优化等多个方面,对于Android应用开发有着重要的学习价值。

    Android 个人理财工具三:添加账单页面 上

    在Android应用开发中,创建一个个人理财工具是一个实用且具有挑战性的任务。本文将探讨如何在这样的工具中实现添加账单页面,这是一个关键功能,允许用户记录他们的收入和支出。在这一部分,我们将关注界面设计、...

    分享Android中ExpandableListView控件使用教程

    在Android开发中,`ExpandableListView` 是一个非常实用的控件,它可以显示具有扩展功能的列表,即每个条目可以展开以显示更多的子条目,通常用于构建具有层级结构的数据展示。本教程将深入讲解如何在Android应用中...

    Android ExpandableListView展开列表控件使用实例

    接下来是关键的Java代码,通常继承自`ExpandableListActivity`或者自定义的`BaseExpandableListAdapter`。这里,`ExpandActivity`类负责设置`ExpandableListView`的数据源和适配器。`onCreate`方法是初始化的关键点...

    ExpandableListView实现手风琴效果

    (2)第二种方法则是创建一个Activity继承自ExpandableListActivity,而后通过getExpandableListView()方法可获得一个ExpandableListView对象。 第二种方法仅适用于一个页面中只有一个ExpandableListView的情况。...

Global site tag (gtag.js) - Google Analytics