完美实现ExpandableListView二级分栏效果

完美实现ExpandableListView二级分栏效果

这篇文章主要为大家详细介绍了可扩展列表视图实现二级分栏效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了可扩展列表视图二级分栏效果的具体代码,供大家参考,具体内容如下

对可扩展列表视图控件进行封装(未自定义)直接上代码:

通用取景器类,仅在setImageResource中添加代码

包com。SVP。严昊。可扩展列表视图。工具;

导入安卓。内容。语境;

导入安卓。图形。位图;

导入安卓。util。稀疏阵列;

导入安卓。查看。layoutinflater

导入安卓。查看。查看;

导入安卓。查看。查看组;

导入安卓。小部件。imageview

导入安卓。小部件。textview

/**

*由严昊于2016年3月24日创建。

*/

公共类查看器{

//存储数据

私有稀疏阵列视图视图;

私人作文;

私有视图mConvertView

私有布尔错误扩展;

公共视图持有者(上下文Context,ViewGroup parent,int layoutId,int position,boolean isExpanded) {

this.mPosition=位置

这个。mviews=new SparseArrayView();

this.misExpanded=isExpanded

//三

mConvertView=layoutinflater。来自(上下文)。inflate(layoutId,parent,false);

//一

mconvertview。settag(这个);

}

公共静态ViewHolder get(上下文上下文,视图convertView,

ViewGroup parent,int layoutId,int position,boolean isExpanded){

if (convertView==null){

返回新的ViewHolder(context,parent,layoutId,position,is expanded);

}否则{

//五六

视图持有者holder=(视图持有者)转换视图。gettag();

持有人。MP osition=位置;

退货单持有者;

}

}

//通过viewId获取控件

//泛型T返回子类

public T extends View T getView(int viewId){

视图视图=视图视图。get(viewId);

if (view==null){

//四

view=mconvertview。findviewbyid(viewId);

mViews.put(viewId,view);

}

返回(吨)视图;

}

//八

公共视图getmConvertView() {

返回mConvertView

}

/**

* 设置文本视图的值

* @param viewId

* @param text

* @返回

*/

//四七九

公共视图持有者setText(int viewId,String text){

TextView TV=getView(viewId);

tv.setText(文本);

还这个;

}

/**

* 一参传id,二参传图片地址,三参为真实的则调用点击变化效果,默认为假的。

* */

公共视图持有者setImageResource(int viewId,int resId,boolean expanded){

ImageView view=getView(viewId);

查看。设置图像资源(resId);

如果(展开){

如果(错误展开){

view.setVisibility(视图。不见了);

}否则{

view.setVisibility(视图。可见);

}

}

还这个;

}

公共视图持有者setImageBitamp(int viewId,Bitmap bitmap){

ImageView view=getView(viewId);

view.setImageBitmap(位图);

还这个;

}

公共视图持有者setImageURI(int viewId,String uri){

ImageView view=getView(viewId);

//Imageloader.getInstance().装载(视图,uri);

还这个;

}

}

实体类扩展_DTO:

包com。SVP。严昊。可扩展列表视图。dto

/**

*由严昊于2016年5月七日创建。

*/

公共类扩展_DTO

私有字符串名称;

私有字符串内容;

私有内部图片

私人(同Internationalorganizations)国际组织照片;

公共静态类Expand_child {

私有字符串孩子名

私有字符串childcont

公共字符串getChildname() {

返回孩子名

}

公共空集合子名称(字符串子名称){

这个。子名=子名;

}

公共字符串getChildcont() {

返回childcont

}

public void setChildcont(String child cont){

这个。child cont=子cont;

}

}

公共字符串getName() {

返回名称;

}

公共void集合名称(字符串名){

this.name=name

}

公共字符串getContents() {

返回内容;

}

公共void setContents(字符串内容){

内容=目录

}

public int getPic() {

返回电影

}

public void setPic(int pic) {

this.pic=pic

}

public int getPhoto() {

返回照片;

}

public void setPhoto(int photo) {

this.photo=照片

}

}

接下来是最主要的适配器:

包com。SVP。严昊。可扩展列表视图;

导入安卓。内容。语境;

导入安卓。数据库。数据集观察者;

导入安卓。查看。查看;

导入安卓。查看。查看组;

导入安卓。小部件。可扩展的list adapter;

导入com。SVP。严昊。可扩展列表视图。工具。视图持有者;

导入Java。util。列表;

导入Java。util。地图;

/**

*由严昊于2016年四月28日创建。

*/

公共抽象类MyExpandableListAdapterT,FIM实现可扩展的ListAdapter {

私有上下文mcontext

私人列表mexpand _ dtos

私有映射Integer,ListF mmap=null

公共MyExpandableListAdapter(上下文上下文,ListT expand_dtos,MapInteger,ListF映射){

this.mcontext=上下文

这个。me xpand _ DTOs=expand _ DTOs

this.mmap=地图

}

/*注册一个观察者(观察者),当此适配器数据修改时即调用此观察者。*/

@覆盖

public void registerDataSetObserver(DataSetObserver观察者){

}

/*取消先前通过注册数据库服务器(DataSetObserver)方式注册进该适配器中的观察者对象*/

@覆盖

public void unregister dataset observer(dataset observer观察者){

}

/*获取组的个数*/

@覆盖

public int getGroupCount() {

返回me xpand _ DTOs。size();

}

/*返回在指定组的儿童数目。*/

@覆盖

public int getChildrenCount(int group position){

返回mmap.get(groupPosition).size();

}

//获取当前父项目的数据

@覆盖

public T get group(int group position){

返回me xpand _ DTOs。get(群位置);

}

/*获取与在指定组给予儿童相关的数据。*/

@覆盖

public F get child(int group position,int childPosition) {

return (mmap.get(groupPosition)).get(子位置));

}

/*获取指定组的ID*/

@覆盖

public long get groupid(int group position){

返回群体定位

}

//得到子项目的身份证明

@覆盖

public long get child id(int group position,int childPosition) {

返回儿童定位

}

//组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。(没效果)

@覆盖

public boolean hasStableIds() {

返回真实的

}

//设置父项目组件

@覆盖

公共视图getGroupView(int groupPosition,boolean isExpanded,View convertView,ViewGroup parent) {

观察架=观察架。get(m context,convertView,parent,R.layout.expand_groupview,groupPosition,已展开);

convert(viewHolder,getGroup(组位置));

返回视图支架。getmconvertview();

}

//自己写

公共抽象void convert(view holder view holder,T T);

公共抽象void convert child(视图保持器视图保持器,F F);

//设置子项目的组件

@覆盖

公共视图getChildView(int groupPosition,int childPosition,boolean isLastChild,View convertView,ViewGroup parent) {

观察架=观察架。get(m context,convertView,parent,R.layout.expand_childview,groupPosition,isLastChild);

convertchild(viewHolder,getChild(groupPosition,child position));

返回视图支架。getmconvertview();

/*子元素是否处于组中的最后一个(对每个组的最后一个进行操作)*/

//布尔isLastChild

/*下边是未封装代码,提供参考*/

//String子名称=(mmap。获得(小组位置).get(childPosition)).获取子名称();

//LayoutInflater inflater=(LayoutInflater)m上下文。getsystem服务(上下文.LAYOUT _ INFLATER _ SERVICE);

//convert view=inflater。膨胀(r .布局。expand _ child视图,null);

//TextView TV _ child=(TextView)转换视图。findviewbyid(r . id。TV _ child);

//TV _ child。settext(子cont);

}

/*是否选中指定位置上的子元素。*/

@覆盖

public boolean isChildSelectable(int group position,int childPosition) {

返回真实的

}

/*正确所有条目可以选择和点击*/

@覆盖

公共布尔areAllItemsEnabled() {

返回错误的

}

/*如果当前适配器不包含任何数据则返回没错。经常用来决定一个空视图是否应该被显示。

一个典型的实现将返回表达式getCount()==0的结果,但是由于getCount()包含了头部和尾部,适配器可能需要不同的行为。*/

@覆盖

public boolean isEmpty() {

返回错误的

}

/*当组展开状态的时候此方法被调用。*/

@覆盖

public void ongroupeexpanded(int group position){

}

/*当组收缩状态的时候此方法被调用。*/

@覆盖

public void onGroupCollapsed(int group position){

}

/*根据所给的子身份证明号和组身份证明号返回唯一的身份证。此外,若hasStableIds()是没错,那么必须要返回稳定的身份证。*/

@覆盖

public long getCombinedChildId(long groupId,long childId) {

返回0;

}

/*同上*/

@覆盖

public long getCombinedGroupId(long groupId){

返回0;

}

}

最后是调用类活动:

包com。SVP。严昊。可扩展列表视图;

导入安卓。OS。捆绑;

导入安卓。支持。V7。app。app compat活动;

导入安卓。小部件。可扩展列表视图;

导入com。SVP。严昊。可扩展列表视图。dto。expand _ DTO;

导入com。SVP。严昊。可扩展列表视图。工具。视图持有者;

导入Java。util。ArrayList

导入Java。util。hashmap

导入Java。util。列表;

公共类主要活动扩展AppCompatActivity {

私有可扩展列表视图e list视图;

私人列表expand _ DTO扩展数据;

private HashMapInteger,ListExpand_DTO .Expand _ child map=null

@覆盖

受保护的void onCreate(Bundle saved instancestate){

超级棒。oncreate(savedInstanceState);

setContentView(r . layout。活动_主);

dataView();

展开视图();

}

私有void expandView() {

elist view=(ExpandableListView)findViewById(r . id。可扩展_ LV);

elist视图。设置适配器(新的MyExpandableListAdapterExpand _DTO,扩展_ DTO .Expand_child(this,expanddata,map) {

@覆盖

public void convert(view moder view moder,Expand_DTO expand_dto) {

视图支架。settext(r . idTV _ expand,expand_dto.getName())。setText(R.id.tv_expand_two,expand_dto.getContents())。setImageResource(r . id。img _ expand,expand_dto.getPic(),false)。setImageResource(r . id。img _ expand _ two,expand_dto.getPhoto(),false);

}

@覆盖

public void convert child(view moder view moder,Expand_DTO .Expand_child expand_child) {

视图支架。settext(r . idTV _ child,expand_child.getChildname())。setText(R.id.tv_child2,expand _ child。getchildcont());

}

});

//去掉自带箭头

elist视图。setgroup指示符(空);

}

私有空的数据视图(){

expand data=new ArrayList expand _ DTO();

Expand _ DTO bean _ zero=new Expand _ DTO();

bean_zero.setName(android新技能1);

bean _ zero。设置内容(“1”);

bean _ zero。设置pic(r . drawable。icon _ check);

bean _ zero。设置照片(可绘制。旅行_机票_ cn _职位);

展开数据。add(bean _ zero);

Expand _ DTO bean _ one=new Expand _ DTO();

bean_one.setName(android新技能2);

bean _ one。设置内容(“2”);

bean _ one。设置pic(r . drawable。icon _ check);

bean _ one。设置照片(可绘制。旅行_机票_ cn _职位);

展开数据。添加(bean _ one);

Expand _ DTO bean _ two=new Expand _ DTO();

bean_two.setName(android新技能3);

豆_二。设置内容(“3”);

豆_二。设置pic(r . drawable。icon _ check);

豆_二。设置照片(可绘制。旅行_机票_ cn _职位);

展开数据。添加(bean _ two);

//这里可以使用稀疏阵列优化性能

map=new HashMapInteger,ListExpand_DTO .expand _ child();

数据传输对象列表扩展expand _ child expand _ children _ zero=新数组列表扩展_DTO .expand _ child();

展开_DTO .Expand _ child child 1=new Expand _ DTO .expand _ child();

孩子1。设置子名称( 11111 );

孩子1。setchildcont( 22222 );

expand _ children _ zero添加(子1);

展开_DTO .Expand _ child child 2=new Expand _ DTO .expand _ child();

孩子2。设置子名称( 3333333 );

孩子2。setchildcont( 4444444 );

expand _ children _ zero添加(子2);

map.put(0,expand _ children _ zero);

数据传输对象列表扩展expand _ child expand _ children _ one=new ArrayList expand _ DTO .expand _ child();

展开_DTO .Expand _ child child 3=new Expand _ DTO .expand _ child();

孩子3。设置子名称( 55555 );

孩子3。setchildcont( 66666 );

展开_子_一。添加(子3);

展开_DTO .Expand _ child child 4=new Expand _ DTO .expand _ child();

孩子4。设置子名称( 77777 );

孩子4。setchildcont( 88888 );

展开_子_一。添加(子4);

map.put(1,expand _ children _ one);

数据传输对象列表扩展expand _ children _ data _ two=new ArrayList expand _ DTO .expand _ child();

展开_DTO .Expand _ child child 5=new Expand _ DTO .expand _ child();

孩子5。设置子名称( 99999 );

孩子5。setchildcont( 00000 );

孩子_数据_两个。添加(子5);

展开_DTO .Expand _ child child 6=new Expand _ DTO .expand _ child();

孩子6。设置子名称( 12345 );

孩子6。setchildcont( 54321 );

孩子_数据_两个。添加(子6);

map.put(2,children _ data _ two);

}

}

完活布局很简单就不贴出来了,加上图片有图有真相:

源码下载:可扩展列表视图二级分栏效果

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

完美实现ExpandableListView二级分栏效果