Android ExpandableListView的使用

简介:

Android ExpandableListView的使用

一、MainActivity要继承ExpandableListActivity。效果是当单机ListView的子项是显示另一个ListView。

public  class  MainActivity extends  ExpandableListActivity {
     
     private  static  final  String NAME = "NAME" ;
     private  static  final  String IS_EVEN = "IS_EVEN" ;
     private  ExpandableListAdapter eListAdapter;
 
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         
         List<Map<String,String>> groupData = new  ArrayList<Map<String,String>>();
         List<List<Map<String, String>>> childDataList = new  ArrayList<List<Map<String,String>>>();
         for  ( int  i = 0 ; i < 10 ; i++) {
             Map<String, String> curGroupMap = new  HashMap<String, String>();
             groupData.add(curGroupMap);
             curGroupMap.put(NAME, "Group" +i);
             curGroupMap.put(IS_EVEN, (i% 2 == 0 )? "This group is even" : "This group is odd" );
             
             List<Map<String, String>> children = new  ArrayList<Map<String,String>>();
             for  ( int  j = 0 ; j < 8 ; j++) {
                 Map<String, String> curChildMap = new  HashMap<String, String>();
                 children.add(curChildMap);
                 curChildMap.put(NAME, "Child"  + j);
                 curChildMap.put(IS_EVEN, (j % 2  == 0 ) ? "This child is even"  : "This child is odd"  );
             }
             childDataList.add(children);
         }
         eListAdapter = new  SimpleExpandableListAdapter(
                 this ,
                 groupData,
                 android.R.layout.simple_expandable_list_item_2,
                 new  String[] {NAME, IS_EVEN },
                 new  int [] { android.R.id.text1, android.R.id.text2},
                 childDataList,
                 android.R.layout.simple_expandable_list_item_2,
                 new  String[] {NAME, IS_EVEN},
                 new  int [] { android.R.id.text1, android.R.id.text2});
         
         setListAdapter(eListAdapter);
                 
     }
}

代码解释

1、groupData是父数据 ,childDataList是子数据。

2、android.R.layout.simple_expandable_list_item_2表示list的实现方式

3、new String[] { NAME,IS_EVEN}list需要显示的数据。             

效果图:

也就是单机Group2时,显示Group2的数据。

 

 

二、数据源:SimpleCursorTreeAdapter的使用

显示通讯录中的姓名,单击用姓名,显示号码。前提还要分配读取通讯录的权限

<uses-permission android:name= "android.permission.READ_CONTACTS" />

 代码如下:

public  class  ExpandableList2 extends  ExpandableListActivity { 
     private  int  mGroupIdColumnIndex;  
       
     private  String mPhoneNumberProjection[] = new  String[] { 
             People.Phones._ID, People.Phones.NUMBER 
     }; 
   
       
     private  ExpandableListAdapter mAdapter; 
       
 
     @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 ); 
        
   
    

 

 三、通过BaseExpandableListAdapter绑定数据

1.BaseExpandableListAdapter

public  class  ExpandableList3 extends  Activity { 
   
     private  String[] groups = { "group1" , "group2" , "group3" , "group4"  }; 
     private  String[][] children = { 
             { "g1 item1" , "g1 item2" , "g1 item3" , "g1 item4"  }, 
             { "g2 item1" , "g2 item2" , "g2 item3" , "g2 item4"  }, 
             { "g3 item1" , "g3 item2"  }, 
             { "g4 item1" , "g4 item2" 
     }; 
     //ExpandableListAdapter mAdapter; 
     private  ExpandableListView expandableListView;
     private  TextView tView = null ;
     
     @Override 
     public  void  onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
   
         setContentView(R.layout.activity_main);
         
         tView = (TextView)findViewById(R.id.textView1);
         expandableListView = (ExpandableListView)findViewById(R.id.expandableListView1);
         
         ExpandableListAdapter adapter = new  BaseExpandableListAdapter() {
     
             @Override
             public  boolean  isChildSelectable( int  groupPosition, int  childPosition) {
                 // TODO Auto-generated method stub
                 String string = groups[groupPosition] + children[groupPosition][childPosition];
                 tView.setText(string);
                 return  true ;
             }
             
             @Override
             public  boolean  hasStableIds() {
                 // TODO Auto-generated method stub
                 return  true ;
             }
             
             @Override
             public  View getGroupView( int  groupPosition, boolean  isExpanded,
                     View convertView, ViewGroup parent) {
                 // TODO Auto-generated method stub
                 LinearLayout layout = new  LinearLayout(ExpandableList3. this );
                 layout.setOrientation( 0 );
                 layout.setPadding( 50 , 0 , 0 , 0 );
                 ImageView imageView = new  ImageView(ExpandableList3. this );
                 imageView.setImageResource(R.drawable.ic_launcher);
                 layout.addView(imageView);
                 
                 TextView textView = getTextView();
                 textView.setText(getGroup(groupPosition).toString());
                 layout.addView(textView);
                 return  layout;
             }
             
             private  TextView getTextView() {
                 // TODO Auto-generated method stub
                 AbsListView.LayoutParams lParams = new  AbsListView.LayoutParams(
                         ViewGroup.LayoutParams.FILL_PARENT, 64 );
                 TextView textView = new  TextView(ExpandableList3. this );
                 textView.setLayoutParams(lParams);
                 textView.setPadding( 20 , 0 , 0 , 0 );
                 textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
                 return  textView;
             }
 
             @Override
             public  long  getGroupId( int  groupPosition) {
                 // TODO Auto-generated method stub
                 return  groupPosition;
             }
             
             @Override
             public  int  getGroupCount() {
                 // TODO Auto-generated method stub
                 return  groups.length;
             }
             
             @Override
             public  Object getGroup( int  groupPosition) {
                 // TODO Auto-generated method stub
                 return  groups[groupPosition];
             }
             
             @Override
             public  int  getChildrenCount( int  groupPosition) {
                 // TODO Auto-generated method stub
                 return  children[groupPosition].length;
             }
             
             @Override
             public  View getChildView( int  groupPosition, int  childPosition,
                     boolean  isLastChild, View convertView, ViewGroup parent) {
                 // TODO Auto-generated method stub
                 TextView textView  = getTextView();
                 textView.setText(getChild(groupPosition, childPosition).toString());
                 return  textView;
             }
             
             @Override
             public  long  getChildId( int  groupPosition, int  childPosition) {
                 // TODO Auto-generated method stub
                 return  childPosition;
             }
             
             @Override
             public  Object getChild( int  groupPosition, int  childPosition) {
                 // TODO Auto-generated method stub
                 return  children[groupPosition][childPosition];
             }
             
             
         };
    
         expandableListView.setAdapter(adapter);
    
       
}

 效果图:点击子项时,显示子项的信息。

 

 

2.数据源写一个类MyExpandableListAdapter,该类继承自 BaseExpandableListAdapter。

public  class  ExpandableList1 extends  ExpandableListActivity { 
   
     ExpandableListAdapter mAdapter; 
   
     @Override 
     public  void  onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
   
         // Set up our adapter 
         mAdapter = new  MyExpandableListAdapter(); 
         setListAdapter(mAdapter); 
         // register context menu, when long click the item, it will show a dialog 
         registerForContextMenu(getExpandableListView()); 
    
       
     @Override 
     public  boolean  onContextItemSelected(MenuItem item) { 
         ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 
   
         String title = ((TextView) info.targetView).getText().toString(); 
           
         int  type = ExpandableListView.getPackedPositionType(info.packedPosition); 
         if  (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
             int  groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);  
             int  childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);  
             Toast.makeText( this , title + ": Child "  + childPos + " clicked in group "  + groupPos, 
                     Toast.LENGTH_SHORT).show(); 
             return  true
         } else  if  (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
             int  groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);  
             Toast.makeText( this , title + ": Group "  + groupPos + " clicked" , Toast.LENGTH_SHORT).show(); 
             return  true
        
           
         return  false
    
   
     /**
      * A simple adapter which maintains an ArrayList of photo resource Ids. 
      * Each photo is displayed as an image. This adapter supports clearing the
      * list of photos and adding a new photo.
      *
      */ 
     public  class  MyExpandableListAdapter extends  BaseExpandableListAdapter { 
         // Sample data set.  children[i] contains the children (String[]) for groups[i]. 
         private  String[] groups = { "People Names" , "Dog Names" , "Cat Names" , "Fish Names"  }; 
         private  String[][] children = { 
                 { "Arnold" , "Barry" , "Chuck" , "David"  }, 
                 { "Ace" , "Bandit" , "Cha-Cha" , "Deuce"  }, 
                 { "Fluffy" , "Snuggles"  }, 
                 { "Goldy" , "Bubbles" 
         }; 
           
         public  Object getChild( int  groupPosition, int  childPosition) { 
             return  children[groupPosition][childPosition]; 
        
   
         public  long  getChildId( int  groupPosition, int  childPosition) { 
             return  childPosition; 
        
   
         public  int  getChildrenCount( int  groupPosition) { 
             return  children[groupPosition].length; 
        
   
         public  TextView getGenericView() { 
             // Layout parameters for the ExpandableListView 
             AbsListView.LayoutParams lp = new  AbsListView.LayoutParams( 
                     ViewGroup.LayoutParams.FILL_PARENT, 64 ); 
   
             TextView textView = new  TextView(ExpandableList1. this ); 
             textView.setLayoutParams(lp); 
             // Center the text vertically 
             textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
             // Set the text starting position 
             textView.setPadding( 36 , 0 , 0 , 0 ); 
             return  textView; 
        
           
         public  View getChildView( int  groupPosition, int  childPosition, boolean  isLastChild, 
                 View convertView, ViewGroup parent) { 
             TextView textView = getGenericView(); 
             textView.setText(getChild(groupPosition, childPosition).toString()); 
             return  textView; 
       
  
         public  Object getGroup( int  groupPosition) { 
             return  groups[groupPosition]; 
        
   
        public  int  getGroupCount() { 
            return  groups.length; 
       
  
         public  long  getGroupId( int  groupPosition) { 
             return  groupPosition; 
        
   
        public  View getGroupView( int  groupPosition, boolean  isExpanded, View convertView, 
                ViewGroup parent) { 
            TextView textView = getGenericView(); 
             textView.setText(getGroup(groupPosition).toString()); 
             return  textView; 
        
   
       public  boolean  isChildSelectable( int  groupPosition, int  childPosition) { 
             return  true
        
  
         public  boolean  hasStableIds() { 
            return  true
        
   
    
}

 效果图:



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/25/2980293.html,如需转载请自行联系原作者

目录
相关文章
|
11月前
|
XML Java Android开发
Android ExpandableListView 使用中遇到的问题集锦
Android ExpandableListView 使用中遇到的问题集锦
|
Android开发
Android 取消 ExpandableListView 的分割线,解决ScrollView 嵌套 ExpandableListView的问题
Android 取消 ExpandableListView 的分割线,解决ScrollView 嵌套 ExpandableListView的问题
|
XML Android开发 数据格式
Android ExpandableListView使用
activity_main.xml layout_parent.xml layout_child.xml MainActivity.
866 0
|
Android开发
Android中ExpandableListView中嵌套ListView
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51136868 最近项目挺紧张,一直没有时间总结学习,今天把最近遇到的一个奇葩的设计,做一下总结。
1625 0
|
Android开发 UED
Android ExpandableListView开发简介
 Android ExpandableListView开发简介 我之前写了一些文章是关于实现带有分组、标签的“ListView”: (文章1)《类似通讯录分组的Android PinnedSectionListView,且分组标签悬停滑入滑出》文章链接:http://blog.
1080 0