ExpandableListActivity的使用

来源:互联网 发布:网络诈骗的总结 编辑:程序博客网 时间:2024/05/18 01:05

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. }  
  45. 注意: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中)文件的布局如下:

    [xhtml] view plaincopy
    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绑定数据:

    [java] view plaincopy
    1. public class ExpandableList2 extends ExpandableListActivity {  
    2.     private int mGroupIdColumnIndex;   
    3.       
    4.     private String mPhoneNumberProjection[] = new String[] {  
    5.             People.Phones._ID, People.Phones.NUMBER  
    6.     };  
    7.   
    8.       
    9.     private ExpandableListAdapter mAdapter;  
    10.       
    11.         /*  
    12.          * CursorTreeAdapter's method.  
    13.          * Gets the Cursor for the children at the given group  
    14.          * /  
    15.     @Override  
    16.     public void onCreate(Bundle savedInstanceState) {  
    17.         super.onCreate(savedInstanceState);  
    18.   
    19.         // Query for people  
    20.         Cursor groupCursor = managedQuery(People.CONTENT_URI,  
    21.                 new String[] {People._ID, People.NAME}, nullnullnull);  
    22.   
    23.         // Cache the ID column index  
    24.         mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID);  
    25.   
    26.         // Set up our adapter  
    27.         mAdapter = new MyExpandableListAdapter(groupCursor,  
    28.                 this,  
    29.                 android.R.layout.simple_expandable_list_item_1,  
    30.                 android.R.layout.simple_expandable_list_item_1,  
    31.                 new String[] {People.NAME}, // Name for group layouts  
    32.                 new int[] {android.R.id.text1},  
    33.                 new String[] {People.NUMBER}, // Number for child layouts  
    34.                 new int[] {android.R.id.text1});  
    35.         setListAdapter(mAdapter);  
    36.     }  
    37.   
    38.     public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {  
    39.   
    40.         public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout,  
    41.                 int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom,  
    42.                 int[] childrenTo) {  
    43.             super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom,  
    44.                     childrenTo);  
    45.         }  
    46.   
    47.   
    48.         @Override  
    49.         protected Cursor getChildrenCursor(Cursor groupCursor) {  
    50.             // Given the group, we return a cursor for all the children within that group   
    51.   
    52.             // Return a cursor that points to this contact's phone numbers  
    53.             Uri.Builder builder = People.CONTENT_URI.buildUpon();  
    54.             ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));  
    55.             builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY);  
    56.             Uri phoneNumbersUri = builder.build();  
    57.   
    58.             // The returned Cursor MUST be managed by us, so we use Activity's helper  
    59.             // functionality to manage it for us.  
    60.             return managedQuery(phoneNumbersUri, mPhoneNumberProjection, nullnullnull);  
    61.         }  
    62.   
    63.     }  
    64. }  

    示例3—通过BaseExpandableListAdapter绑定数据:

    [java] view plaincopy
    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(000, 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(36000);  
    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. }  


原创粉丝点击