Android自定义ExpandableListView

ExpandableListView是android中可以实现下拉list的一个控件,是一个垂直滚动的心事两个级别列表项手风琴试图,列表项是来自ExpandableListViewaAdapter,组可以单独展开。

重要方法:

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);//判断此组是否展开

 

expandableListView.setDivider();这个是设定每个Group之间的分割线。

  expandableListView.setGroupIndicator();这个是设定每个Group之前的那个图标。

  expandableListView.collapseGroup(int group); 将第group组收起

ExpandableListAdapter

一个接口,将基础数据链接到一个ExpandableListView。 此接口的实施将提供访问Child的数据(由组分类),并实例化的Child和Group。

1.重要方法

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

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

如下案例:

 

 

   
   实现这样的效果需要自定义一个Adapter,自定义的Adapter继承BaseExpandableListAdapter,重写getGroupView和

getChildView方法时实例化自己的布局文件就可以了。下面是实现代码:

主布局文件  main.xml

<?xmlversion="1.0"encoding="utf-8"?>

   <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"                                                                        
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:orientation="vertical"
       android:background="#ffffff"
       >

       <ExpandableListView
           android:id="@+id/elist"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:background="#ffffff"
        />

  </LinearLayout>

子视图布局文件 child_layout.xml

 <?xmlversion="1.0"encoding="utf-8"?>

   <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"                                                                         
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="30dp"
        >

        <ImageView
            android:id="@+id/civ"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/ren"
            android:padding="5dp"
         />

        <TextView
            android:id="@+id/ctv"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:padding="5dp"
            android:textColor="#000000"
         />

   </LinearLayout> 

分组视图布局文件 group_layout.xml

<?xmlversion="1.0"encoding="utf-8"?>

    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"                                                                     
        android:id="@+id/grlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
              android:id="@+id/gtv"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:paddingLeft="20dp"
              android:textColor="#000000"
         />

        <ImageView
              android:id="@+id/giv"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentRight="true"
              android:layout_centerVertical="true"
              android:paddingRight="10dp"
              android:src="@drawable/jia"
         />

    </RelativeLayout> 

自定义适配器 MyElistAdapter.java

  publicclass MyElistAdapter extends BaseExpandableListAdapter {                                                                                       

         // 分组数据
        private String[] group = { "A组", "B组", "C组", "D组" }; 
        private String[][] child = { { "A01", "A02", "A03" }, 
                { "B01", "B02", "B03" }, { "C01", "C02", "C03" }, 
                { "D04", "D05", "D06" } }; 
        private Context mContext; 

        public MyElistAdapter(Context mContext) { 
                super(); 
                this.mContext = mContext; 
        } 

        @Override 
        public int getGroupCount() { 
            return group.length; 
        } 

        @Override 
        public int getChildrenCount(int groupPosition) { 
                return child[groupPosition].length; 
        } 

        @Override 
        public Object getGroup(int groupPosition) { 
                return group[groupPosition]; 
        } 

        @Override 
        public Object getChild(int groupPosition, int childPosition) { 
                return child[groupPosition][childPosition]; 
        } 

        @Override 
        public long getGroupId(int groupPosition) { 
                return groupPosition; 
        } 

        @Override 
        public long getChildId(int groupPosition, int childPosition) { 
                returnchildPosition; 
        } 

        @Override 
        public boolean hasStableIds() { 
                return true; 
        } 

        @Override 
        public View getGroupView(int groupPosition, boolean isExpanded, 
        View convertView, ViewGroup parent) { 
                // 实例化布局文件
                RelativeLayout glayout = (RelativeLayout) LayoutInflater.from(mContext)     
                .inflate(R.layout.group_layout, null); 
                 ImageView iv = (ImageView) glayout.findViewById(R.id.giv); 
                 // 判断分组是否展开,分别传入不同的图片资源
                if (isExpanded) { 
                        iv.setImageResource(R.drawable.jian); 
                } else { 
                        iv.setImageResource(R.drawable.jia); 
                } 
               TextView tv = (TextView) glayout.findViewById(R.id.gtv); 
                tv.setText(this.getGroup(groupPosition).toString()); 
                return glayout; 
         } 

         @Override 
        public View getChildView(int groupPosition, int childPosition, 
        boolean isLastChild, View convertView, ViewGroup parent) { 
                // 实例化布局文件
                LinearLayout clayout = (LinearLayout) LayoutInflater.from(mContext)              
                .inflate(R.layout.child_layout, null); 
                TextView tv = (TextView) clayout.findViewById(R.id.ctv); 
                tv.setText(getChild(groupPosition, childPosition).toString()); 
                return clayout; 
        } 

        @Override 
        public boolean isChildSelectable(int groupPosition, int childPosition) { 
                return true; 
        } 
    } 

MainActivity.java

publicclass ExpandableTestActivity extends Activity {                                                                                                           

        private ExpandableListView elistview; 

        @Override 
        public void onCreate(Bundle savedInstanceState) { 
                super.onCreate(savedInstanceState); 
                setContentView(R.layout.main); 
                elistview = (ExpandableListView) findViewById(R.id.elist);                               
                //这里要把系统自带的图标去掉 
                elistview.setGroupIndicator(null); 
                elistview.setAdapter(new ElistAdapter(this)); 
                // elistview.setChildDivider(null); 
                // elistview.setDivider(null); 
         } 

    } 

 

 

原文地址:https://www.cnblogs.com/xuewater/p/2631021.html