博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android ExpandableListView
阅读量:5162 次
发布时间:2019-06-13

本文共 7975 字,大约阅读时间需要 26 分钟。

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数目。

案例:

首先定义个一个布局文件expandablelistview.xml

package com.test; import java.util.ArrayList;import java.util.List; import javax.security.auth.PrivateCredentialPermission; import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.TextView; public class ExpandableListViewDemo extends Activity {    /** Called when the activity is first created. */         //定义两个List用来控制Group和Child中的String;         private  List
groupArray;//组列表 private List
> childArray;//子列表 private ExpandableListView expandableListView_one; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// requestWindowFeature(Window.FEATURE_NO_TITLE); //设置为无标题 setContentView(R.layout.expandablelistview); expandableListView_one =(ExpandableListView)findViewById(R.id.expandableListView); groupArray =new ArrayList
(); childArray = new ArrayList
>(); /*-第一季-*/ initdate(); expandableListView_one.setAdapter(new ExpandableListViewaAdapter(ExpandableListViewDemo.this)); /*-第二季-*/// groupArray.add("移动开发");// List
arrayList = new ArrayList
();// arrayList.add("Android");// arrayList.add("IOS");// arrayList.add("Windows Phone");// //组循环// for(int index=0;index
childItem =new ArrayList
(); for(int index=0;index

运行效果:

案例二:

1.定义一个主界面expandablelistview.xml

2.在res/drawable目录下创建样式文件expandablelistview_groups.xml该界面是组界面:

3.在res/drawable目录下创建样式文件expandablelistview_child.xml;是子控件,直接显示列表内容

定义java文件:ExpandableListViewDemo_two.java

package com.test; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; import javax.security.auth.PrivateCredentialPermission; import com.test.R;import com.test.ExpandableListViewDemo.ExpandableListViewaAdapter;import com.test.R.id;import com.test.R.layout; import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.SimpleExpandableListAdapter;import android.widget.TextView; public class ExpandableListViewDemo_two extends Activity {    /** Called when the activity is first created. */      private  ExpandableListView  expandableListView_one;    @Override      public void onCreate(Bundle savedInstanceState)       {           super.onCreate(savedInstanceState);           setContentView(R.layout.expandablelistview);           expandableListView_one =(ExpandableListView)findViewById(R.id.expandableListView);           //创建二个一级条目标题            Map
title_1 = new HashMap
(); Map
title_2 = new HashMap
(); title_1.put("group", "移动开发"); title_2.put("group", "男人的需求"); //创建一级条目容器 List
> gruops = new ArrayList
>(); gruops.add(title_1); gruops.add(title_2); //创建二级条目内容 //内容一 Map
content_1 = new HashMap
(); Map
content_2 = new HashMap
(); content_1.put("child", "ANDROID"); content_2.put("child", "IOS"); List
> childs_1 = new ArrayList
>(); childs_1.add(content_1); childs_1.add(content_2); //内容二 Map
content_3 = new HashMap
(); Map
content_4 = new HashMap
(); Map
content_5 = new HashMap
(); content_3.put("child", "金钱"); content_4.put("child", "权力"); content_5.put("child", "女人"); List
> childs_2 = new ArrayList
>(); childs_2.add(content_3); childs_2.add(content_4); childs_2.add(content_5); //存放两个内容, 以便显示在列表中 List
>> childs = new ArrayList
>>(); childs.add(childs_1); childs.add(childs_2); //创建ExpandableList的Adapter容器 /** * 使用SimpleExpandableListAdapter显示ExpandableListView * 参数1.上下文对象Context * 参数2.一级条目目录集合 * 参数3.一级条目对应的布局文件 (expandablelistview_groups.xml文件 * 参数4.fromto,就是map中的key,指定要显示的对象 * 参数5.与参数4对应,指定要显示在groups中的id * 参数6.二级条目目录集合 * 参数7.二级条目对应的布局文件 * 参数9.与参数8对应,指定要显示在childs中的id / SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( this, gruops, R.drawable.expandablelistview_groups, new String[]{"group"}, new int[]{R.id.textGroup}, childs, R.drawable.expandablelistview_child, new String[]{"child"}, new int[]{R.id.textChild} ); //加入列表 expandableListView_one.setAdapter(adapter); expandableListView_one.setOnChildClickListener(listener); } private OnChildClickListener listener =new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // TODO Auto-generated method stub toast("点击了"); return false; } }; private void toast(String str) { Toast.makeText(this, str, Toast.LENGTH_LONG).show(); } }

 上面的样式也可以使用系统的自带的样式如下:

android.R.layout.simple_expandable_list_item_1,//层显示样式 ,系统自定义  

android.R.layout.simple_expandable_list_item_2,  

运行效果:

案例三:如果group中有个ImageVIew将会是什么情况呢?

在SimpleExpandableListAdapter中有如下方法:

private void bindView(View view, Map
data, String[] from, int[] to) { int len = to.length; for (int i = 0; i < len; i++) { TextView v = (TextView)view.findViewById(to[i]); if (v != null) { v.setText((String)data.get(from[i])); } } }

从上面的方法中可以看出 SimpleExpandableListAdapter把所以的View都当成TextView来处理了,而不像SimpleAdapter可以自动判断View的类型,自动绑定,解决版本就是重写bingview回调一下试试:

public class MyExpandableListAdapter extends BaseExpandableListAdapter{        private void bindView(View view, Map
data, String[] from, int[] to) { int len = to.length; boolean isBound = false; for (int i = 0; i < len; i++) { final View v = view.findViewById(to[i]); if (v!=null) { final Object _data = data.get(from[i]); String text = _data == null ? "" : data.toString(); if (text == null) { text = ""; } if (mViewBinder != null) {
//如果Binder不为空,使用Binder进行处理 isBound = mViewBinder.setViewValue(v, data.get(from[i]), text); } if (!isBound) {
//如果Binder跳过,使用原来的方法进行处理 TextView _v = (TextView)v; _v.setText((String)data.get(from[i])); } } } }}

 

转载于:https://www.cnblogs.com/zhujiabin/p/4216281.html

你可能感兴趣的文章
Django基于admin的stark组件创建(一)
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>