时间:2021-05-19
本文实例为大家分享了ExpandableListView二级分栏效果的具体代码,供大家参考,具体内容如下
对ExpandableListView控件进行封装(未自定义)直接上代码:
通用ViewHolder类,仅在setImageResource中添加代码
package com.svp.haoyan.expandablelistview.tool;import android.content.Context;import android.graphics.Bitmap;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;/** * Created by haoyan on 2016/3/24. */public class ViewHolder { //存储数据 private SparseArray<View> mViews; private int mPosition; private View mConvertView; private boolean misExpanded; public ViewHolder(Context context, ViewGroup parent, int layoutId, int position,boolean isExpanded) { this.mPosition=position; this.mViews= new SparseArray<View>(); this.misExpanded=isExpanded; //三 mConvertView= LayoutInflater.from(context).inflate(layoutId,parent,false); //一 mConvertView.setTag(this); } public static ViewHolder get(Context context,View convertView, ViewGroup parent,int layoutId,int position,boolean isExpanded){ if (convertView==null){ return new ViewHolder(context,parent,layoutId,position,isExpanded); }else { //五 六 ViewHolder holder=(ViewHolder)convertView.getTag(); holder.mPosition=position; return holder; } } //通过viewId获取控件 //泛型T返回子类 public <T extends View> T getView(int viewId){ View view =mViews.get(viewId); if (view==null){ //四 view=mConvertView.findViewById(viewId); mViews.put(viewId,view); } return (T)view; } //八 public View getmConvertView() { return mConvertView; } /** * 设置TextView的值 * @param viewId * @param text * @return */ //四 七 九 public ViewHolder setText(int viewId,String text){ TextView tv= getView(viewId); tv.setText(text); return this; } /** * 一参传id,二参传图片地址,三参为true则调用点击变化效果,默认为false. * */ public ViewHolder setImageResource(int viewId,int resId,boolean expanded){ ImageView view= getView(viewId); view.setImageResource(resId); if (expanded){ if (misExpanded){ view.setVisibility(View.GONE); }else { view.setVisibility(View.VISIBLE); } } return this; } public ViewHolder setImageBitamp(int viewId,Bitmap bitmap){ ImageView view= getView(viewId); view.setImageBitmap(bitmap); return this; } public ViewHolder setImageURI(int viewId,String uri){ ImageView view= getView(viewId);// Imageloader.getInstance().loadImg(view,uri); return this; }}实体类Expand_DTO:
package com.svp.haoyan.expandablelistview.dto;/** * Created by haoyan on 2016/5/7. */public class Expand_DTO { private String name; private String contents; private int pic; private int photo; public static class Expand_child { private String childname; private String childcont; public String getChildname() { return childname; } public void setChildname(String childname) { this.childname = childname; } public String getChildcont() { return childcont; } public void setChildcont(String childcont) { this.childcont = childcont; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContents() { return contents; } public void setContents(String contents) { this.contents = contents; } public int getPic() { return pic; } public void setPic(int pic) { this.pic = pic; } public int getPhoto() { return photo; } public void setPhoto(int photo) { this.photo = photo; }}接下来是最主要的Adapter:
package com.svp.haoyan.expandablelistview;import android.content.Context;import android.database.DataSetObserver;import android.view.View;import android.view.ViewGroup;import android.widget.ExpandableListAdapter;import com.svp.haoyan.expandablelistview.tool.ViewHolder;import java.util.List;import java.util.Map;/** * Created by haoyan on 2016/4/28. */public abstract class MyExpandableListAdapter<T,F>implements ExpandableListAdapter { private Context mcontext; private List<T> mexpand_dtos; private Map<Integer, List<F>> mmap = null; public MyExpandableListAdapter(Context context, List<T> expand_dtos,Map<Integer, List<F>> map) { this.mcontext = context; this.mexpand_dtos = expand_dtos; this.mmap=map; } @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getGroupCount() { return mexpand_dtos.size(); } @Override public int getChildrenCount(int groupPosition) { return mmap.get(groupPosition).size(); } //获取当前父item的数据 @Override public T getGroup(int groupPosition) { return mexpand_dtos.get(groupPosition); } @Override public F getChild(int groupPosition, int childPosition) { return (mmap.get(groupPosition).get(childPosition)); } @Override public long getGroupId(int groupPosition) { return groupPosition; } //得到子item的ID @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } //组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。(没效果) @Override public boolean hasStableIds() { return true; } //设置父item组件 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ViewHolder viewHolder = ViewHolder.get(mcontext, convertView, parent, R.layout.expand_groupview, groupPosition,isExpanded); convert(viewHolder, getGroup(groupPosition)); return viewHolder.getmConvertView(); } //自己写 public abstract void convert(ViewHolder viewHolder, T t); public abstract void convertchild(ViewHolder viewHolder, F f); //设置子item的组件 @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewHolder viewHolder = ViewHolder.get(mcontext, convertView, parent, R.layout.expand_childview, groupPosition,isLastChild); convertchild(viewHolder, getChild(groupPosition,childPosition)); return viewHolder.getmConvertView(); //boolean isLastChild // String Childname = (mmap.get(groupPosition).get(childPosition)).getChildname();// LayoutInflater inflater = (LayoutInflater)mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// convertView = inflater.inflate(R.layout.expand_childview, null);// TextView tv_child = (TextView) convertView.findViewById(R.id.tv_child);// tv_child.setText(Childcont); } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEmpty() { return false; } @Override public void onGroupExpanded(int groupPosition) { } @Override public void onGroupCollapsed(int groupPosition) { } @Override public long getCombinedChildId(long groupId, long childId) { return 0; } @Override public long getCombinedGroupId(long groupId) { return 0; }}最后是调用类Activity:
完活布局很简单就不贴出来了,加上图片有图有真相:
源码下载:ExpandableListView二级分栏效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
今天给大家讲讲android的目录实现方法,就像大家看到的小说目录一样,android提供了ExpandableListView控件可以实现二级列表展示效果,现
本文实例为大家分享了ExpandableListView实现简单二级列表的具体代码,供大家参考,具体内容如下xml创建一个ExpandableListViewE
本文实例为大家分享了vue.js实现二级菜单效果的具体代码,供大家参考,具体内容如下主要是对二级菜单和当前点击的处理:点击导航时,如果有二级菜单,就切换二级菜单
本文实例讲述了jquery实现简单的二级导航下拉菜单效果。分享给大家供大家参考。具体如下:jQuery代码实现的二级导航菜单效果,非常简洁,喜欢简洁风格的朋友您
Vue嵌套路由:实现效果(路由三层嵌套,点击一级tab显示二级tab效果,二级tab点击切换对应内容,不在tab区域里的内容,切换时不重复渲染):Demo访问时