zoukankan      html  css  js  c++  java
  • Android中ExpandableListView的使用

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

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

    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

    1. private  List<String> groupArray;  
    2. private  List<List<String>> childArray;  
     

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

    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

    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

    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的数据(由组分类),并实例化的Child和Group。

      1.重要方法

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

        getChildrenCount (int groupPosition) 返回在指定Group的Child数目。

      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;
             }

         }

  • 相关阅读:
    推荐一款快得令地发指本地搜索软件:Everything,绝对改变对NTFS的看法
    “/”应用程序中的服务器错误 WebParts开发时出现的错误
    《让人无法说 NO的攻心说话术》摘要
    UXWEEK
    2012中国交互设计体验日演讲实录
    彩色铅笔入门
    ClickOnce证书签名
    DevExpress控件使用小结
    解决ClickOnce签名过期问题
    属于自己的小小空间
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4568403.html
Copyright © 2011-2022 走看看