亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

完美實現ExpandableListView二級分欄效果

2019-10-21 21:35:42
字體:
來源:轉載
供稿:網友

本文實例為大家分享了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; } /*注冊一個觀察者(observer),當此適配器數據修改時即調用此觀察者。*/ @Override public void registerDataSetObserver(DataSetObserver observer) { } /*取消先前通過registerDataSetObserver(DataSetObserver)方式注冊進該適配器中的觀察者對象*/ @Override public void unregisterDataSetObserver(DataSetObserver observer) { } /*獲取組的個數*/ @Override public int getGroupCount() {  return mexpand_dtos.size(); } /*返回在指定Group的Child數目。*/ @Override public int getChildrenCount(int groupPosition) {  return mmap.get(groupPosition).size(); } //獲取當前父item的數據 @Override public T getGroup(int groupPosition) {  return mexpand_dtos.get(groupPosition); } /*獲取與在指定group給予child相關的數據。*/ @Override public F getChild(int groupPosition, int childPosition) {  return (mmap.get(groupPosition).get(childPosition)); } /*獲取指定組的ID*/ @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; } /*true所有條目可以選擇和點擊*/ @Override public boolean areAllItemsEnabled() {  return false; } /*如果當前適配器不包含任何數據則返回True。經常用來決定一個空視圖是否應該被顯示。 一個典型的實現將返回表達式getCount() == 0的結果,但是由于getCount()包含了頭部和尾部,適配器可能需要不同的行為。*/ @Override public boolean isEmpty() {  return false; } /*當組展開狀態的時候此方法被調用。*/ @Override public void onGroupExpanded(int groupPosition) { } /*當組收縮狀態的時候此方法被調用。*/ @Override public void onGroupCollapsed(int groupPosition) { } /*根據所給的子ID號和組ID號返回唯一的ID。此外,若hasStableIds()是true,那么必須要返回穩定的ID。*/ @Override public long getCombinedChildId(long groupId, long childId) {  return 0; } /*同上*/ @Override public long getCombinedGroupId(long groupId) {  return 0; }}

最后是調用類Activity:

package com.svp.haoyan.expandablelistview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ExpandableListView;import com.svp.haoyan.expandablelistview.dto.Expand_DTO;import com.svp.haoyan.expandablelistview.tool.ViewHolder;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class MainActivity extends AppCompatActivity { private ExpandableListView elistview; private List<Expand_DTO> expanddata; private HashMap<Integer, List<Expand_DTO.Expand_child>> map = null; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  dataView();  expandView(); } private void expandView() {  elistview = (ExpandableListView) findViewById(R.id.expandable_lv);  elistview.setAdapter(new MyExpandableListAdapter<Expand_DTO,Expand_DTO.Expand_child>(this, expanddata,map) {   @Override   public void convert(ViewHolder viewHolder, Expand_DTO expand_dto) {    viewHolder.setText(R.id.tv_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);   }   @Override   public void convertchild(ViewHolder viewHolder, Expand_DTO.Expand_child expand_child) {    viewHolder.setText(R.id.tv_child,expand_child.getChildname())       .setText(R.id.tv_child2,expand_child.getChildcont());   }  });  //去掉自帶箭頭  elistview.setGroupIndicator(null); } private void dataView() {  expanddata = new ArrayList<Expand_DTO>();  Expand_DTO bean_zero = new Expand_DTO();  bean_zero.setName("android新技能1");  bean_zero.setContents("1");  bean_zero.setPic(R.drawable.icon_check);  bean_zero.setPhoto(R.drawable.travel_airfare_cn_position);  expanddata.add(bean_zero);  Expand_DTO bean_one = new Expand_DTO();  bean_one.setName("android新技能2");  bean_one.setContents("2");  bean_one.setPic(R.drawable.icon_check);  bean_one.setPhoto(R.drawable.travel_airfare_cn_position);  expanddata.add(bean_one);  Expand_DTO bean_two = new Expand_DTO();  bean_two.setName("android新技能3");  bean_two.setContents("3");  bean_two.setPic(R.drawable.icon_check);  bean_two.setPhoto(R.drawable.travel_airfare_cn_position);  expanddata.add(bean_two);  //這里可以使用SparseArray優化性能  map = new HashMap<Integer, List<Expand_DTO.Expand_child>>();  List<Expand_DTO.Expand_child> expand_children_zero=new ArrayList<Expand_DTO.Expand_child>();  Expand_DTO.Expand_child child1=new Expand_DTO.Expand_child();  child1.setChildname("11111");  child1.setChildcont("22222");  expand_children_zero.add(child1);  Expand_DTO.Expand_child child2=new Expand_DTO.Expand_child();  child2.setChildname("3333333");  child2.setChildcont("4444444");  expand_children_zero.add(child2);  map.put(0,expand_children_zero);  List<Expand_DTO.Expand_child> expand_children_one=new ArrayList<Expand_DTO.Expand_child>();  Expand_DTO.Expand_child child3=new Expand_DTO.Expand_child();  child3.setChildname("55555");  child3.setChildcont("66666");  expand_children_one.add(child3);  Expand_DTO.Expand_child child4=new Expand_DTO.Expand_child();  child4.setChildname("77777");  child4.setChildcont("88888");  expand_children_one.add(child4);  map.put(1,expand_children_one);  List<Expand_DTO.Expand_child> children_data_two=new ArrayList<Expand_DTO.Expand_child>();  Expand_DTO.Expand_child child5=new Expand_DTO.Expand_child();  child5.setChildname("99999");  child5.setChildcont("00000");  children_data_two.add(child5);  Expand_DTO.Expand_child child6=new Expand_DTO.Expand_child();  child6.setChildname("12345");  child6.setChildcont("54321");  children_data_two.add(child6);  map.put(2,children_data_two); }}

完活布局很簡單就不貼出來了,加上圖片有圖有真相:

ExpandableListView,二級分欄

源碼下載:ExpandableListView二級分欄效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲一区二区三区| 亚洲图片在区色| 欧美与欧洲交xxxx免费观看| 日韩中文在线中文网在线观看| 精品久久久久久中文字幕一区奶水| 亚洲三级 欧美三级| 精品精品国产国产自在线| 欧美激情按摩在线| 日韩欧美a级成人黄色| 国产成人97精品免费看片| 国产亚洲精品综合一区91| 欧美成人黑人xx视频免费观看| 久久精品99国产精品酒店日本| 欧美电影在线免费观看网站| 青青草精品毛片| 91在线无精精品一区二区| 精品久久久久人成| 丰满岳妇乱一区二区三区| 在线播放日韩专区| 亚洲国产精品99| 国产精品2018| 亚洲免费电影一区| 国产精品一区二区三区久久| 91av在线网站| 国产精品人成电影| 精品国偷自产在线视频| 国产精品福利网| 国产精品久久久久久久久久免费| 欧美诱惑福利视频| 91av视频在线观看| 超碰精品一区二区三区乱码| 国内精品一区二区三区| 欧美激情一区二区三区高清视频| 伊人久久久久久久久久久久久| 久久亚洲欧美日韩精品专区| 精品香蕉一区二区三区| 中文字幕精品在线| 亚洲免费一级电影| 97碰碰碰免费色视频| 国产精品激情av电影在线观看| 久久精品视频播放| 97在线视频免费播放| 91精品国产电影| 久久99精品久久久久久噜噜| 国产v综合ⅴ日韩v欧美大片| 91av视频在线播放| 热久久美女精品天天吊色| 久久久女人电视剧免费播放下载| **欧美日韩vr在线| 九九综合九九综合| 国产suv精品一区二区| 国模精品视频一区二区| 亚洲成人精品久久| 久久亚洲春色中文字幕| 97碰碰碰免费色视频| 日韩在线欧美在线国产在线| www.亚洲天堂| 91黄色8090| 亚洲国产精品va在看黑人| 久久久免费精品| 国产精品旅馆在线| 欧美插天视频在线播放| 国产亚洲精品美女久久久| 国产日韩视频在线观看| 精品亚洲精品福利线在观看| 亚洲女人天堂色在线7777| 欧美日韩电影在线观看| 欧美日韩精品中文字幕| 日韩精品在线看| 色爱精品视频一区| 92国产精品久久久久首页| 色yeye香蕉凹凸一区二区av| 国产精品久久久久久久久久| 国产91成人在在线播放| 国产精品一区二区电影| 美日韩丰满少妇在线观看| 国产成人一区三区| 久久久久中文字幕2018| 538国产精品一区二区在线| 日韩欧美国产骚| 国产日韩欧美中文在线播放| 欧美激情奇米色| 久久精品视频va| 欧美亚洲国产精品| 中文字幕亚洲欧美| 92版电视剧仙鹤神针在线观看| 欧美三级xxx| 国产免费一区二区三区在线观看| 久久影院资源站| 8x海外华人永久免费日韩内陆视频| 亚洲精品国产成人| 欧美成人免费一级人片100| 久久久免费在线观看| 亚洲一区二区三区乱码aⅴ| 亚洲视频欧洲视频| 久久久久久亚洲| www欧美日韩| 欧美色另类天堂2015| 欧美裸体xxxx极品少妇| 欧美日韩午夜激情| 欧美国产日韩一区二区| 色香阁99久久精品久久久| 欧美日韩中文字幕| 日韩精品久久久久久福利| 91久久久久久久久久久久久| 中文字幕亚洲综合| 国产精品美乳在线观看| 国产精品无码专区在线观看| 久青草国产97香蕉在线视频| 亚洲欧洲在线视频| 孩xxxx性bbbb欧美| 亚洲国产精品99久久| 亚洲精品美女久久久| 国产精品九九久久久久久久| 国产原创欧美精品| 亚洲国产天堂久久综合网| 亚洲欧美日韩直播| 日本成熟性欧美| 国产69久久精品成人看| 成人免费淫片视频软件| 国产精品吹潮在线观看| 久久成人精品一区二区三区| 日韩欧美亚洲一二三区| 欧美成人午夜激情| 久久久久久久成人| 日本精品久久久久久久| 亚洲网站视频福利| 欧美色videos| 性欧美长视频免费观看不卡| 91网站免费观看| 国内精品久久久| 国产在线拍揄自揄视频不卡99| 久久99久国产精品黄毛片入口| 国产日本欧美一区| 久久久亚洲精品视频| 亚洲国产成人精品久久久国产成人一区| 欧美激情国内偷拍| 欧洲成人午夜免费大片| 欧美日韩在线一区| 一区二区三区天堂av| 欧美精品成人91久久久久久久| 亚洲欧美一区二区三区在线| 精品成人国产在线观看男人呻吟| 高清欧美性猛交xxxx| 热久久这里只有精品| 国产欧美一区二区三区久久人妖| 亚洲精品久久久久久久久久久久| 久热精品在线视频| 久久综合久中文字幕青草| 8x海外华人永久免费日韩内陆视频| 欧洲日韩成人av| 欧美有码在线观看| 日本不卡视频在线播放| 欧美激情啊啊啊| 亚洲曰本av电影| 成人黄色网免费| 亚洲跨种族黑人xxx| 亚洲毛片一区二区| 国产精品久久婷婷六月丁香| 欧美极品少妇xxxxⅹ喷水| 久久久国产精彩视频美女艺术照福利| 国产精品亚洲视频在线观看| 亚洲欧美三级在线| 国产精品一二区|