zoukankan      html  css  js  c++  java
  • Adroid 展开收起效果实现

    Layout
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".ExpandableListViewActivity">
    
        <ExpandableListView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ecpandable"
            />
    </RelativeLayout>
    JAVA代码
    
    package com.example.wequst.test2;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AbsListView;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    
    public class ExpandableListViewActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_expandable_list_view);
            /**BaseExpandableListAdapter实现了ExpandableListAdapter*/
            final ExpandableListAdapter adapter = new BaseExpandableListAdapter(){
    
                /**----------定义数组-------------------------------------------------------------------*/
                private int[] images = new int[]{
                        R.drawable.ic_launcher,
                        R.drawable.ic_launcher,
                        R.drawable.ic_launcher
                };
                private String[] armTypes = new String[]{
                        "神族","虫族","人族"
                };
                private String[][] arms = new String[][]{
                        {"狂战士","龙骑士","黑暗圣堂"},
                        {"小狗","飞龙","自爆妃子"},
                        {"步兵","伞兵","护士mm"}
                };
    
    /*===========组元素表示可折叠的列表项,子元素表示列表项展开后看到的多个子元素项=============*/
    
                /**----------得到armTypes和arms中每一个元素的ID-------------------------------------------*/
    
                //获取组在给定的位置编号,即armTypes中元素的ID
                @Override
                public long getGroupId(int groupPosition) {
                    return groupPosition;
                }
    
                //获取在给定的组的儿童的ID,就是arms中元素的ID
                @Override
                public long getChildId(int groupPosition, int childPosition) {
                    return childPosition;
                }
    
                /**----------根据上面得到的ID的值,来得到armTypes和arms中元素的个数 ------------------------*/
    
                //获取的群体数量,得到armTypes里元素的个数
                @Override
                public int getGroupCount() {
                    return armTypes.length;
                }
    
                //取得指定组中的儿童人数,就是armTypes中每一个种族它军种的个数
                @Override
                public int getChildrenCount(int groupPosition) {
                    return arms[groupPosition].length;
                }
    
                /**----------利用上面getGroupId得到ID,从而根据ID得到armTypes中的数据,并填到TextView中 -----*/
    
                //获取与给定的组相关的数据,得到数组armTypes中元素的数据
                @Override
                public Object getGroup(int groupPosition) {
                    return armTypes[groupPosition];
                }
    
                //获取一个视图显示给定组,存放armTypes
                @Override
                public View getGroupView(int groupPosition, boolean isExpanded,
                                         View convertView, ViewGroup parent) {
                    TextView textView = getTextView();//调用定义的getTextView()方法
                    textView.setText(getGroup(groupPosition).toString());//添加数据
                    return textView;
                }
    
                /**----------利用上面getChildId得到ID,从而根据ID得到arms中的数据,并填到TextView中---------*/
    
                //获取与孩子在给定的组相关的数据,得到数组arms中元素的数据
                @Override
                public Object getChild(int groupPosition, int childPosition) {
                    return arms[groupPosition][childPosition];
                }
    
                //获取一个视图显示在给定的组 的儿童的数据,就是存放arms
                @Override
                public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                                         View convertView, ViewGroup parent) {
                    LinearLayout ll = new LinearLayout(ExpandableListViewActivity.this);
                    ImageView logo = new ImageView(ExpandableListViewActivity.this);
                    logo.setImageResource(images[groupPosition]);//添加图片
                    ll.addView(logo);
                    TextView textView = getTextView();//调用定义的getTextView()方法
                    textView.setText(getChild(groupPosition,childPosition).toString());//添加数据
                    ll.addView(textView);
                    return ll;
                }
    
                /**------------------自定义一个设定TextView属性的方法----------------------------------------------*/
    
                //定义一个TextView
                private TextView getTextView(){
                    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,100);
                    TextView textView = new TextView(ExpandableListViewActivity.this);
                    textView.setLayoutParams(lp);
                    textView.setPadding(70, 0, 0, 0);
                    textView.setTextSize(20);
                    return textView;
                }
    
                /**-------------------其他设置-------------------------------------------------------------------*/
    
                //孩子在指定的位置是可选的,即:arms中的元素是可点击的
                @Override
                public boolean isChildSelectable(int groupPosition,
                                                 int childPosition) {
                    return true;
                }
    
                //表示孩子是否和组ID是跨基础数据的更改稳定
                public boolean hasStableIds() {
                    return true;
                }
            };
    
            /**使用适配器*/
            final ExpandableListView expandListView = (ExpandableListView) this.findViewById(R.id.ecpandable);
            expandListView.setAdapter(adapter);
    
            expandListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView parent, View v,
                                            int groupPosition, int childPosition, long id) {
                    return true;
                }
            });
    
            expandListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v,
                                            int groupPosition, long id) {
    
                    int i=adapter.getChildrenCount(groupPosition);
                    if(i==0)
                    {
    
                    }
                    return false;   //默认为false,设为true时,点击事件不会展开Group
                }
            });
        }
    
    }
  • 相关阅读:
    MQTT---HiveMQ源代码具体解释(四)插件载入
    HTTP访问控制(CORS)
    java实现限流
    Orika的使用姿势,Orika java bean copy 框架
    uploadify是通过flash上传,服务器获取type为application/octet-stream
    ThinkPHP 5使用 Composer 组件名称可以从https://packagist.org/ 搜索到
    3种方法轻松处理php开发中emoji表情的问题
    解决thinkphp设置session周期无效的问题
    如何使用沙箱测试单笔转账到支付宝账号(php版) https://openclub.alipay.com/read.php?tid=1770&fid=28
    微信jssdk批量添加卡券接口
  • 原文地址:https://www.cnblogs.com/wequst/p/4641482.html
Copyright © 2011-2022 走看看