zoukankan      html  css  js  c++  java
  • 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); 
             } 
    
        } 

     

     

  • 相关阅读:
    FFmpeg命令:几种常见场景下的FFmpeg命令(摄像头采集推流,桌面屏幕录制推流、转流,拉流等等)
    javaCV入门指南:序章
    javacpp-FFmpeg系列补充:FFmpeg拉流截图实现在线演示demo(视频截图并返回base64图像,支持jpg/png/gif/bmp等多种格式)
    javacpp-FFmpeg系列之3: 像素图像数据转换(BGR与BufferdImage互转,RGB与BufferdImage互转,BufferdImage转Base64编码)
    javacpp-FFmpeg系列补充:FFmpeg解决avformat_find_stream_info检索时间过长问题
    javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据
    Cache系列:spring-cache简单三步快速应用ehcache3.x-jcache缓存(spring4.x)
    运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】
    javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片
    spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发
  • 原文地址:https://www.cnblogs.com/xuewater/p/2631021.html
Copyright © 2011-2022 走看看