android_ExpandableListView

来源:互联网 发布:csol抽奖软件 编辑:程序博客网 时间:2024/06/04 01:38

简单介绍:

ExpandableListView是ListView的子类,
这个类,主要的使用场景就是,当条目下面还有子条目。这个时候,就是用ExpandableListView来操作。

第一步:页面布局

    <ExpandableListView        android:groupIndicator="@null"        android:id="@+id/commnumber_elv"        android:layout_width="match_parent"        android:layout_height="match_parent" >    </ExpandableListView>  /**groupIndicator属性,是用来控制,主条目,是否会显示下拉的箭头。不让其显示就赋值为@null*/

Activity中的代码

public class MainActivity extends Activity implements OnChildClickListener, OnGroupClickListener {    private ExpandableListView mElv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //准备数据        //组的数据        String[] group=new String[]{"组1","组2","组3","组4","组5"};        //一个组下面有多个条目        String[] item1=new String[]{"子1","子1","子1","子1","子1","子1","子1","子1"};        String[] item2=new String[]{"子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2"};        String[] item3=new String[]{"子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3"};        String[] item4=new String[]{"子4","子4","子4","子4","子4","子4","子4","子4"};        String[] item5=new String[]{"子5","子5","子5","子5","子5","子5","子5","子5"};        //把子的数据,往集合里面添加        List<String[]> list=new ArrayList<String[]>();        list.add(item1);        list.add(item2);        list.add(item3);        list.add(item4);        list.add(item5);        mElv = (ExpandableListView) findViewById(R.id.elv);        mElv.setAdapter(new ExableAdapter(this,group,list));        mElv.setOnChildClickListener(this);//监听子条目被点击        mElv.setOnGroupClickListener(this);//监听组被点击了    }    @Override    public boolean onChildClick(ExpandableListView parent, View v,            int groupPosition, int childPosition, long id) {        Log.d("tag", "子条目被点击了");        return true;    }    int mCurrenPosition=-1;//当前没有任何的组展开    @Override    public boolean onGroupClick(ExpandableListView parent, View v,            int groupPosition, long id) {        if(mCurrenPosition==-1){//表示当前没有任何的组展开            mElv.expandGroup(groupPosition);            mCurrenPosition=groupPosition;        }else{            if(mCurrenPosition==groupPosition){//2次点击的是相同的组                mElv.collapseGroup(groupPosition);                mCurrenPosition=-1;            }else{//如果2次点击的条目不一致,就关闭以前的组,展开现在点击的组,并且置顶                //关闭组                mElv.collapseGroup(mCurrenPosition);                //展开组                mElv.expandGroup(groupPosition);                //选择置顶的组                mElv.setSelectedGroup(groupPosition);                mCurrenPosition=groupPosition;            }        }        /**         *  performClick view         *  expandableListView 的条目点击实际上就是父亲里面有一个方法处理  performItemClick         *          */        //返回值 true:  关于组的点击效果,只会执行我们这里的逻辑,系统默认的逻辑,再也不会执行了。        //false:  代表的是,这个组的点击,除了处理我们自己写的逻辑之外,还会处理父亲中的组展开和关闭的逻辑,所以        //有可能在界面上看到重复的效果,或者是某一个组并没有移动到最顶上位置        return true;    }    }

ExableAdapter

public class ExableAdapter extends BaseExpandableListAdapter {    Context context;    String[] group;    List<String[]> allItem;    public ExableAdapter(Context context, String[] group, List<String[]> item) {        this.context = context;        this.group = group;        this.allItem = item;    }    // 组有多少条目    @Override    public int getGroupCount() {        return group.length;    }    // 子条目有多少条    @Override    public int getChildrenCount(int groupPosition) {        return allItem.get(groupPosition).length;    }    // 显示组的View    @Override    public View getGroupView(int groupPosition, boolean isExpanded,            View convertView, ViewGroup parent) {        TextView tv = new TextView(context);        String value = group[groupPosition];        tv.setTextSize(18);        tv.setBackgroundColor(Color.parseColor("#33000000"));        tv.setPadding(8, 8, 8, 8);        tv.setText(value);        return tv;    }    // 显示子条目的View    @Override    public View getChildView(int groupPosition, int childPosition,            boolean isLastChild, View convertView, ViewGroup parent) {        TextView tv = new TextView(context);        // 获取到每一个子的        String itemValue = allItem.get(groupPosition)[childPosition];        tv.setTextSize(18);        tv.setPadding(8, 8, 8, 8);        tv.setText(itemValue);        return tv;    }    // 子条目是否可以被点击,当设置为true表示可以被点击    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }    // ---------分割线----------    @Override    public Object getGroup(int groupPosition) {        return null;    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return null;    }    @Override    public long getGroupId(int groupPosition) {        return 0;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return 0;    }    @Override    public boolean hasStableIds() {        return false;    }}
0 0
原创粉丝点击