这篇文章主要为大家详细介绍了可扩展列表视图实现二级分栏效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了可扩展列表视图二级分栏效果的具体代码,供大家参考,具体内容如下
对可扩展列表视图控件进行封装(未自定义)直接上代码:
通用取景器类,仅在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);
}
}
完活布局很简单就不贴出来了,加上图片有图有真相:
源码下载:可扩展列表视图二级分栏效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。