本文实例为大家分享了expandablelistview实现手风琴效果的具体代码,供大家参考,具体内容如下

1. 效果示例图

2. 创建方法

(1)第一种方法与listview等普通控件一样,直接在布局文件中添加expandablelistview控件即可。

(2)第二种方法则是创建一个activity继承自expandablelistactivity,而后通过getexpandablelistview()方法可获得一个expandablelistview对象。

第二种方法仅适用于一个页面中只有一个expandablelistview的情况。继承的activity不需要再调用setcontentview()方法,在expandablelistactivity中已经关联了一个系统定义的布局文件。

3. 部分属性和点击事件

android:groupindicator、android:childindicator:组条目和子条目前面的图标,默认值为箭头,可设置自定义图片资源。若不显示该图标,则设置为@null。

android:divider、android:childdivider:组和子条目的分隔线。

expandablelistview的点击事件有两个,分别对应组和子条目的点击事件:

设置组的点击事件:setongroupclicklistener(ongroupclicklistener listener)

设置子条目的点击事件:setonchildclicklistener(onchildclicklistener listener)

5. 适配器

根据数据源的不同,可使用的适配器有两个:baseexpandablelistadapter和cursortreeadapter,其中,cursortreeadapter用于数据源为cursor对象的情况下,其它情况则使用baseexpandablelistadapter。

(1)baseexpandablelistadapter需要重写的方法:

getgroup():从数据源中获取组的数据内容。

getgroupcount():获取组的总数。

getgroupid():获取组的id。

getgroupview():获取组的视图。

getchild():从数据源中获取子条目的内容。

getchildcount():获取指定组中的子条目总数,并非全部的子条目。

getchildid():获取子条目的id。

getchildview():获取子条目的视图

hasstableids():判断id对应的条目是否已经绘制,用于优化列表。

ischildselectable():子条目是否允许点击,若返回false,则子条目点击事件无效。

(2)cursortreeadapter需要重写的方法:

cursortreeadapter():构造方法传入组的cursor对象。

getchildrencursor():传入组的cursor对象,获取相应的组的子条目的cursor对象。

newgroupview():创建组的视图,返回一个新的视图。

bindgroupview():在这里绑定组视图的数据内容,第一个参数即newgroupview()方法的返回值。

newchildview():创建子条目的视图。

bindchildview():绑定子条目视图的数据内容。

6. 简单范例

实现效果图中的例子。

布局:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.studying.expandablelistviewdemo.mainactivity">

android:id="@+id/elv_local_data"

android:layout_width="match_parent"

android:layout_height="match_parent" />

activity:

public class mainactivity extends activity {

private expandablelistview elv;

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_main);

elv = (expandablelistview) findviewbyid(r.id.elv_local_data);

mybaseexpandablelistadapter adapter = new mybaseexpandablelistadapter(this, loaddata.getgroupdata(), loaddata.getchilddata());

elv.setadapter(adapter);

}

}

加载测试数据用的工具类:

public class loaddata {

// 组的数据内容

public static list getgroupdata() {

list groupdatalist = new arraylist<>();

groupdatalist.add("计算机基础");

groupdatalist.add("安卓开发");

return groupdatalist;

}

// 子条目的数据内容

public static list> getchilddata() {

list> childdatalist = new arraylist<>();

list group1 = new arraylist<>();

group1.add("数据结构");

group1.add("算法");

group1.add("计算机网络");

childdatalist.add(group1);

list group2 = new arraylist<>();

group2.add("控件使用");

group2.add("网络操作");

group2.add("数据存储");

group2.add("四大组件");

childdatalist.add(group2);

return childdatalist;

}

}

适配器:

public class mybaseexpandablelistadapter extends baseexpandablelistadapter {

private context mcontext;

private list groupname;

private list> childname;

public mybaseexpandablelistadapter(context mcontext, list groupname, list> childname) {

this.mcontext = mcontext;

this.groupname = groupname;

this.childname = childname;

}

@override

public int getgroupcount() {

return groupname.size();

}

@override

public long getgroupid(int groupposition) {

return groupposition;

}

@override

public string getgroup(int groupposition) {

return groupname.get(groupposition);

}

@override

public view getgroupview(int groupposition, boolean isexpanded, view convertview, viewgroup parent) {

convertview = view.inflate(mcontext, r.layout.item_group_name, null);

textview groupname = (textview) convertview.findviewbyid(r.id.group_name);

groupname.settext(getgroup(groupposition));

return convertview;

}

@override

public int getchildrencount(int groupposition) {

return childname.get(groupposition).size();

}

@override

public long getchildid(int groupposition, int childposition) {

return childposition;

}

@override

public string getchild(int groupposition, int childposition) {

return childname.get(groupposition).get(childposition);

}

@override

public view getchildview(int groupposition, int childposition, boolean islastchild, view convertview, viewgroup parent) {

convertview = view.inflate(mcontext, r.layout.item_child_name, null);

textview childname = (textview) convertview.findviewbyid(r.id.child_name);

childname.settext(getchild(groupposition, childposition));

return convertview;

}

@override

public boolean hasstableids() {

return false;

}

@override

public boolean ischildselectable(int groupposition, int childposition) {

return true;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

手风琴控件android,ExpandableListView实现手风琴效果相关推荐

  1. 手风琴控件android,手风琴控件 | Accordion Control

    在手风琴控件中,每个标题被点击时都有一段内容可以展开,来显示更多信息.有些设计可以在打开手风琴控件的一部分的同时关闭其他部分. STEP0:下载练习文件 如果你还没有练习文件,请下载Axure Tra ...

  2. Android左右滑动控件实现开关的切换效果

    /**  * 开关控件,通过左右滑动控件实现开关的切换效果 <br>  * 使用时需要设置开关状态监听{@link OnSwitchStateChangeListener} <br& ...

  3. android toolbar控件,Android Toolbar控件

    1. Toolbar类 Toolbar是替代ActionBar的产物,低版本可以使用v7兼容包,使用Theme.AppCompat主题,并添加配置. false true 2. Toolbar配置 主 ...

  4. 视频教程-Android Material Design 新控件-Android

    Android Material Design 新控件 刘志远,北京邮电大学硕士研究生, 北京育华志远科技有限公司创始人, 育华志远教育品牌负责人,育华志远课程体系打造者. 率领团队为互联网行业培训千 ...

  5. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  6. Bootstrap日期控件,实现日期控件只选择不准输入效果

    一.引入日期控件CSS,JS 二.input就用控件 <td>发行时间</td><td><div class='input-group date' style ...

  7. listview控件Android,Android中ListView控件的简单使用

    文章引自郭霖<第一行代码> ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕 使用LIstView控件 1 在布局文件中引入Li ...

  8. ToolStrip控件左右拖拽移动效果实现

    1.主窗体下部添加一个Panel乘放ToolStrip控件以实现ToolStrip在窗体下部定位. 2.当ToolStrip控件中子控件超出屏幕时,拖动控件可以实现滑动效果.拖动到控件边缘距窗体边缘1 ...

  9. android侧滑布局,Android布局控件DrawerLayout实现完美侧滑效果

    drawerLayout其实是一个布局控件,跟LinearLayout等控件是一样的,但是drawerLayout带有滑动的功能.只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效 ...

  10. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果

    有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...

最新文章

  1. VS的几个实用快捷键
  2. Android Service 形式分类
  3. mysql分区跨机器_(转) mysql的分区技术 .
  4. java实现分布式redis锁_使用redis实现分布式锁
  5. 在 .NET 6 Preview 3 ASP.NET Core 更新
  6. Spring Bean 定义继承
  7. 1.4.在TypeScript中使用JQuery
  8. HR-PD 中文数据无法抽取的问题
  9. 云、AI、5G技术融合,会将移动互联网带到什么新高度?
  10. Android 7.1 App Shortcuts使用
  11. MySQL:BlackHole
  12. Linux上利用NFS实现远程挂载
  13. flutter 动画json_flutter常用内置动画组件
  14. Samsung GT-P5100刷andorid 4.3
  15. Android关机充电编译,Android6.0+关机状态下实现充电自动开机
  16. 软件工程——软件结构图设计(变换分析设计、事务分析设计、混合流设计)
  17. 基于OpenCV的人脸识别签到系统
  18. 一年200多天不上网 看远望7号船员怎么玩抖音
  19. 未认证公众号如何跳转其他链接
  20. win10黑屏Duilib资源加载失败

热门文章

  1. usnews2015美国大学计算机排名,2019USNews美国大学计算机专业排名
  2. LFY-SpringBoot2【SpringBoot2入门】
  3. 【复数表达】Deep Complex Network
  4. Golang学习笔记(二)
  5. 软件项目工作量估算方法解析
  6. linux增加swap空间的方法
  7. tolower c语言,C 库函数 tolower() 使用方法及示例
  8. 2003服务器开机无限重启,Windows2003 系统自动重启
  9. Flutter中的Isolate的个人理解
  10. HTTPClient网络异常:java.lang.IllegalStateException: Content has been consumed