最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

完美實(shí)現(xiàn)ExpandableListView二級(jí)分欄效果

 更新時(shí)間:2018年11月21日 15:09:06   作者:帝乙?guī)r  
這篇文章主要為大家詳細(xì)介紹了ExpandableListView實(shí)現(xiàn)二級(jí)分欄效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了ExpandableListView二級(jí)分欄效果的具體代碼,供大家參考,具體內(nèi)容如下

對(duì)ExpandableListView控件進(jìn)行封裝(未自定義)直接上代碼:

通用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 {
 //存儲(chǔ)數(shù)據(jù)
 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;
 }

 /**
  * 設(shè)置TextView的值
  * @param viewId
  * @param text
  * @return
  */
 //四 七 九
 public ViewHolder setText(int viewId,String text){
  TextView tv= getView(viewId);
  tv.setText(text);
  return this;
 }
 /**
  * 一參傳id,二參傳圖片地址,三參為true則調(diào)用點(diǎn)擊變化效果,默認(rèn)為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;
 }

}

實(shí)體類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;
 }
 /*注冊(cè)一個(gè)觀察者(observer),當(dāng)此適配器數(shù)據(jù)修改時(shí)即調(diào)用此觀察者。*/
 @Override
 public void registerDataSetObserver(DataSetObserver observer) {

 }
 /*取消先前通過registerDataSetObserver(DataSetObserver)方式注冊(cè)進(jìn)該適配器中的觀察者對(duì)象*/
 @Override
 public void unregisterDataSetObserver(DataSetObserver observer) {

 }
 /*獲取組的個(gè)數(shù)*/
 @Override
 public int getGroupCount() {
  return mexpand_dtos.size();
 }
 /*返回在指定Group的Child數(shù)目。*/
 @Override
 public int getChildrenCount(int groupPosition) {
  return mmap.get(groupPosition).size();
 }
 //獲取當(dāng)前父item的數(shù)據(jù)
 @Override
 public T getGroup(int groupPosition) {
  return mexpand_dtos.get(groupPosition);
 }
 /*獲取與在指定group給予child相關(guān)的數(shù)據(jù)。*/
 @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;
 }
 //組和子元素是否持有穩(wěn)定的ID,也就是底層數(shù)據(jù)的改變不會(huì)影響到它們。(沒效果)
 @Override
 public boolean hasStableIds() {
  return true;
 }
 //設(shè)置父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);
 //設(shè)置子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();
  /*子元素是否處于組中的最后一個(gè)(對(duì)每個(gè)組的最后一個(gè)進(jìn)行操作)*/
  //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所有條目可以選擇和點(diǎn)擊*/
 @Override
 public boolean areAllItemsEnabled() {
  return false;
 }
 /*如果當(dāng)前適配器不包含任何數(shù)據(jù)則返回True。經(jīng)常用來決定一個(gè)空視圖是否應(yīng)該被顯示。
 一個(gè)典型的實(shí)現(xiàn)將返回表達(dá)式getCount() == 0的結(jié)果,但是由于getCount()包含了頭部和尾部,適配器可能需要不同的行為。*/
 @Override
 public boolean isEmpty() {
  return false;
 }
 /*當(dāng)組展開狀態(tài)的時(shí)候此方法被調(diào)用。*/
 @Override
 public void onGroupExpanded(int groupPosition) {

 }
 /*當(dāng)組收縮狀態(tài)的時(shí)候此方法被調(diào)用。*/
 @Override
 public void onGroupCollapsed(int groupPosition) {

 }
 /*根據(jù)所給的子ID號(hào)和組ID號(hào)返回唯一的ID。此外,若hasStableIds()是true,那么必須要返回穩(wěn)定的ID。*/
 @Override
 public long getCombinedChildId(long groupId, long childId) {
  return 0;
 }
 /*同上*/
 @Override
 public long getCombinedGroupId(long groupId) {
  return 0;
 }
}

最后是調(diào)用類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優(yōu)化性能
  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);

 }
}

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

源碼下載:ExpandableListView二級(jí)分欄效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Android 視頻滾動(dòng)列表(偷懶型)

    詳解Android 視頻滾動(dòng)列表(偷懶型)

    小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧本篇文章主要介紹了Android 視頻滾動(dòng)列表(偷懶型),
    2017-11-11
  • 解決WebView通過URL加載H5界面出現(xiàn)空白的問題

    解決WebView通過URL加載H5界面出現(xiàn)空白的問題

    這篇文章主要介紹了解決WebView通過URL加載H5界面出現(xiàn)空白的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android ScrollView實(shí)現(xiàn)向上滑動(dòng)控件頂部懸浮效果

    Android ScrollView實(shí)現(xiàn)向上滑動(dòng)控件頂部懸浮效果

    這篇文章主要為大家詳細(xì)介紹了Android ScrollView實(shí)現(xiàn)向上滑動(dòng)控件頂部懸浮效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 一些比較實(shí)用的 Android adb 命令分享

    一些比較實(shí)用的 Android adb 命令分享

    這篇文章主要介紹了一些比較實(shí)用的 Android adb 命令分享,本文講解了查看設(shè)備、安裝應(yīng)用、卸載一個(gè)應(yīng)用、啟動(dòng)一個(gè)頁面、進(jìn)入設(shè)備的shell界面等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • Android App界面的ListView布局實(shí)戰(zhàn)演練

    Android App界面的ListView布局實(shí)戰(zhàn)演練

    這篇文章主要介紹了Android App界面的ListView布局方法,文中分了三種情況通過實(shí)例來講解,ListView適用于功能最簡(jiǎn)單的應(yīng)用程序UI布局,需要的朋友可以參考下
    2016-04-04
  • Android清除工程中無用資源文件的兩種方法

    Android清除工程中無用資源文件的兩種方法

    這篇文章主要介紹了Android清除工程中無用資源文件的兩種方法,調(diào)用Android lint命令查找出無用資源,二是使用代碼自動(dòng)刪除無用的文件,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 淺談Android中AsyncTask的工作原理

    淺談Android中AsyncTask的工作原理

    AsyncTask是Android本身提供的一種輕量級(jí)的異步任務(wù)類。它可以在線程池中執(zhí)行后臺(tái)任務(wù),然后把執(zhí)行的進(jìn)度和最終的結(jié)果傳遞給主線程更新UI。本文將介紹Android中AsyncTask的工作原理。
    2021-06-06
  • Android實(shí)現(xiàn)BannerLayout圖文輪播功能

    Android實(shí)現(xiàn)BannerLayout圖文輪播功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)BannerLayout圖文輪播功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android中activity跳轉(zhuǎn)按鈕事件的四種寫法

    Android中activity跳轉(zhuǎn)按鈕事件的四種寫法

    這篇文章主要介紹了Android中activity跳轉(zhuǎn)按鈕事件的四種寫法,下文中包括四個(gè)activity的內(nèi)容詳解,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-10-10
  • Android常用設(shè)計(jì)模式之原型模式詳解

    Android常用設(shè)計(jì)模式之原型模式詳解

    這篇文章主要為大家介紹了Android常用設(shè)計(jì)模式之原型模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

南陵县| 江孜县| 平泉县| 达拉特旗| 麻城市| 石狮市| 乌拉特后旗| 平顺县| 怀安县| 治县。| 潜江市| 余江县| 绥德县| 获嘉县| 皋兰县| 确山县| 青冈县| 麻栗坡县| 云浮市| 阿巴嘎旗| 九龙坡区| 湖北省| 和静县| 扎兰屯市| 宣恩县| 桑植县| 聂拉木县| 达州市| 常州市| 延长县| 仲巴县| 永兴县| 上高县| 穆棱市| 乐至县| 陕西省| 上饶县| 崇仁县| 吴忠市| 南郑县| 东乡族自治县|