Android中ExpandableListView的使用 – gyflyx的专栏 – 博客频道 – CSDN.NET

ExpandableListView是android中可以实现下拉list的一个控件具体的实现方法如下:

首先:在layout的xml文件中定义一个ExpandableListView

view plain

copy to clipboard

print

?

  1. <

    LinearLayout

       

  2.     android:id

    =“@+id/linearLayout”

      

  3.     android:layout_width

    =“fill_parent”

       

  4.     android:layout_height

    =“fill_parent”

      

  5.     androidrientation

    =“vertical”

      

  6.     >

      

  7.       
  8.     <

    ExpandableListView

      

  9.     android:id

    =“@+id/expandableListView”

      

  10.     android:layout_width

    =“fill_parent”

      

  11.     android:layout_height

    =“wrap_content”

      

  12.         />

      

  13. </

    LinearLayout

    >

      

 

定义两个List用来存放控件中Group/Child中的String

view plain

copy to clipboard

print

?

  1. private

     List<String> groupArray;  

  2. private

     List<List<String>> childArray;  

 

对这两个List进行初始化并插入一些数据

view plain

copy to clipboard

print

?

  1. groupArray = new

     ArrayList<String>();  

  2. childArray = new

     ArrayList<List<String>>();  

  3.   

  4. groupArray.add(“第一行”

    );  

  5. groupArray.add(“第二行”

    );  

  6.   

  7. List<String> tempArray = new

     ArrayList<String>();  

  8. tempArray.add(“第一条”

    );  

  9. tempArray.add(“第二条”

    );  

  10. tempArray.add(“第三条”

    );  

  11.   

  12. for

    (int

     index = 0

    ; index <groupArray.size(); ++index)  

  13. {  

  14.     childArray.add(tempArray);  

  15. }  

定义ExpandableListView的Adapter

view plain

copy to clipboard

print

?

  1. //ExpandableListView的Adapter

      

  2. public

     class

     ExpandableAdapter extends

     BaseExpandableListAdapter  

  3. {  
  4.     Activity activity;  
  5.       
  6.     public

     ExpandableAdapter(Activity a)  

  7.     {  
  8.         activity = a;  
  9.     }  
  10.     public

     Object getChild(int

     groupPosition, int

     childPosition)  

  11.     {  
  12.         return

     childArray.get(groupPosition).get(childPosition);  

  13.     }  
  14.     public

     long

     getChildId(int

     groupPosition, int

     childPosition)  

  15.     {  
  16.         return

     childPosition;  

  17.     }  
  18.     public

     int

     getChildrenCount(int

     groupPosition)  

  19.     {  
  20.         return

     childArray.get(groupPosition).size();  

  21.     }  
  22.     public

     View getChildView(int

     groupPosition, int

     childPosition,  

  23.             boolean

     isLastChild, View convertView, ViewGroup parent)  

  24.     {  
  25.         String string = childArray.get(groupPosition).get(childPosition);  
  26.         return

     getGenericView(string);  

  27.     }  
  28.     // group method stub

      

  29.     public

     Object getGroup(int

     groupPosition)  

  30.     {  
  31.         return

     groupArray.get(groupPosition);  

  32.     }  
  33.     public

     int

     getGroupCount()  

  34.     {  
  35.         return

     groupArray.size();  

  36.     }  
  37.     public

     long

     getGroupId(int

     groupPosition)  

  38.     {  
  39.         return

     groupPosition;  

  40.     }  
  41.     public

     View getGroupView(int

     groupPosition, boolean

     isExpanded,  

  42.             View convertView, ViewGroup parent)  
  43.     {  
  44.         String string = groupArray.get(groupPosition);  
  45.         return

     getGenericView(string);  

  46.     }  
  47.     // View stub to create Group/Children ‘s View

      

  48.     public

     TextView getGenericView(String string)  

  49.     {  
  50.         // Layout parameters for the ExpandableListView

      

  51.         AbsListView.LayoutParams layoutParams = new

     AbsListView.LayoutParams(  

  52.                 ViewGroup.LayoutParams.FILL_PARENT, 64

    );  

  53.         TextView text = new

     TextView(activity);  

  54.         text.setLayoutParams(layoutParams);  
  55.         // Center the text vertically

      

  56.         text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);  
  57.         // Set the text starting position

      

  58.         text.setPadding(36

    , 0

    , 0

    , 0

    );  

  59.         text.setText(string);  
  60.         return

     text;  

  61.     }  
  62.     public

     boolean

     hasStableIds()  

  63.     {  
  64.         return

     false

    ;  

  65.     }  
  66.     public

     boolean

     isChildSelectable(int

     groupPosition, int

     childPosition)  

  67.     {  
  68.         return

     true

    ;  

  69.     }  
  70. }  

最后给定义好的ExpandableListView添加上Adapter

view plain

copy to clipboard

print

?

  1. ExpandableListView expandableListView = (ExpandableListView)findViewById(R.id.expandableListView);  
  2. expandableListView.setAdapter(new

     ExpandableAdapter(Main.this

    ));  

运行即可见效果~~~

 

—————————————————————————————————————-

Android版手风琴(ExpandableListView)

先看效果过瘾一番。

 

 

 源码下载:http://files.cnblogs.com/salam/WidgetDemo.rar

 

  

  ExpandableListView是Android中的手风琴本人感觉效果相当棒。

  一、ExpandableListView介绍

    一个垂直滚动的显示两个级别(Child,Group)列表项的视图列表项来自ExpandableListAdapter 。组可以单独展开。

  1.重要方法

      expandGroup

(int groupPos) :在分组列表视图中

展开一组

      setSelectedGroup

(int groupPosition) :设置选择指定的组。

      setSelectedChild

(int groupPosition, int childPosition, boolean shouldExpandGroup) :设置选择指定的子项。

      getPackedPositionGroup

(long packedPosition) :返回所选择的组

      getPackedPositionForChild

(int groupPosition, int childPosition) :返回所选择的子项

      getPackedPositionType

(long packedPosition) :返回所选择项的类型(Child,Group

      isGroupExpanded

(int groupPosition) :判断此组是否展开

  2.代码:

ExpandableListContextMenuInfo menuInfo=(ExpandableListContextMenuInfo)item.getMenuInfo();

  String title=((TextView)menuInfo.targetView).getText().toString();

  int type=ExpandableListView.getPackedPositionType(menuInfo.packedPosition);

  

  if (type==ExpandableListView.PACKED_POSITION_TYPE_CHILD) {

  int groupPos =ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);

  int childPos =ExpandableListView.getPackedPositionChild(menuInfo.packedPosition);

二、ExpandableListAdapter

    一个接口将基础数据链接到一个ExpandableListView。

此接口的实施将提供访问Child的数据(由组分类)并实例化的ChildGroup

  1.重要方法

    getChildId

(int groupPosition, int childPosition) 获取与在给定组给予孩子相关的数据。

    getChildrenCount

(int groupPosition) 返回在指定GroupChild数目。

  2.代码

 public class MyExpandableListAdapter extends BaseExpandableListAdapter {

         // Sample data set.  children[i] contains the children (String[]) for groups[i].

         public String[] groups = { “我的好友”, “新疆同学”, “亲戚”, “同事” };

         public String[][] children = {

                 { “胡算林”, “张俊峰”, “王志军”, “二人” },

                 { “李秀婷”, “蔡乔”, “别高”, “余音” },

                 { “摊派新”, “张爱明” },

                 { “马超”, “司道光” }

         };

        

         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.MATCH_PARENT, 64);

             TextView textView = new TextView(ExpandableListDemo.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;

         }

     }

来源URL:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c42246140c32bdf06d3f4344959e2d3956b21f0baca36d2c761e24b19fcb884cddafd7756fde2861275a9140628243f4951032c151c51ab4e85bf0bb8070ceef899584090fdd53746d80819c5b70459034ae4226e2d6db15540456e1b06c&p=882a9546d29515be4ebe9b7c480e95&newp=816cd215d9c342ab4bbbc7710f4e96231610db2151d4da146c82&user=baidu&fm=sc&query=getChild%28groupPosition%2C+childPosition%29&qid=e1d9efef0003371e&p1=3