適配器:
packagecom.example.lenovo.expandlistview;
importandroid.content.Context;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseExpandableListAdapter;
importandroid.widget.TextView;
importandroid.widget.Toast;
importjava.util.ArrayList;
/**
* Created by Lenovo on 2017/11/17.
*/
public classAdapterextendsBaseExpandableListAdapter {
privateArrayListbiglist;
privateArrayList>totaltitlelist;
privateContextcontext;
publicAdapter(ArrayList biglist, ArrayList> totaltitlelist, MainActivity mainActivity) {
this.biglist= biglist;
this.totaltitlelist= totaltitlelist;
this.context= mainActivity;
}
@Override
public intgetGroupCount() {
returnbiglist.size();//一級(jí)標(biāo)簽的數(shù)目
}
@Override
public intgetChildrenCount(intgroupPosition) {//一級(jí)標(biāo)簽下二級(jí)標(biāo)簽的數(shù)目
returntotaltitlelist.get(groupPosition).size();
}
@Override
publicObject getGroup(intgroupPosition) {//一級(jí)標(biāo)簽的內(nèi)容
return null;
}
@Override
publicObject getChild(intgroupPosition,intchildPosition) {//一級(jí)標(biāo)簽下二級(jí)標(biāo)簽的內(nèi)容
return null;
}
@Override
public longgetGroupId(intgroupPosition) {//一級(jí)標(biāo)簽的ID
return0;
}
@Override
public longgetChildId(intgroupPosition,intchildPosition) {//二級(jí)標(biāo)簽的ID
return0;
}
@Override
public booleanhasStableIds() {//指定位置相應(yīng)的組視圖
return false;
}
@Override
publicView getGroupView(intgroupPosition,booleanisExpanded, View convertView, ViewGroup parent) {
/*
* 條目的復(fù)用會(huì)提高系統(tǒng)的加載性能,每一次創(chuàng)建新的convertview,具有一定的系統(tǒng)開(kāi)銷
*
*
* 第一次打開(kāi)Listview的時(shí)候 Adapter中的convertview無(wú)疑是空的,所以就會(huì)創(chuàng)建convertview,那是多少個(gè)呢,一屏有多少條,就創(chuàng)建多少條
* 下面還有一個(gè)tag用于標(biāo)記convertview ,復(fù)用機(jī)制不保證順序,但可以利用完,可以把這放在一個(gè)首尾相拉的鏈表里(一個(gè)閉環(huán)的圓圈鏈表)
*
*
* */
GroupViewHolder holder =null;
if(null== convertView) {
holder =newGroupViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.groupitem,null);
holder.tv_group= convertView.findViewById(R.id.tv_group);
convertView.setTag(holder);
}else{
holder = (GroupViewHolder) convertView.getTag();
}
holder.tv_group.setText(biglist.get(groupPosition));
returnconvertView;
}
@Override
publicView getChildView(final intgroupPosition,final intchildPosition,booleanisLastChild, View convertView, ViewGroup parent) {
ChildViewHolder holder=null;
if(null==convertView){
holder=newChildViewHolder();
convertView=LayoutInflater.from(context).inflate(R.layout.childitem,null);
holder.tv_child= convertView.findViewById(R.id.tv_child);
convertView.setTag(holder);
}else{
holder= (ChildViewHolder) convertView.getTag();
}
holder.tv_child.setText(totaltitlelist.get(groupPosition).get(childPosition));
holder.tv_child.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Toast.makeText(context,totaltitlelist.get(groupPosition).get(childPosition)+"被點(diǎn)擊了", Toast.LENGTH_SHORT).show();
}
});
returnconvertView;
}
@Override
public booleanisChildSelectable(intgroupPosition,intchildPosition) {
return false;
}
}
classGroupViewHolder {
TextViewtv_group;
}
classChildViewHolder{
TextViewtv_child;
}
=========================================================================================================
//主activity
packagecom.example.lenovo.expandlistview;
importandroid.graphics.drawable.Drawable;
importandroid.os.Bundle;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.View;
importandroid.widget.ExpandableListView;
importjava.lang.reflect.Array;
importjava.util.ArrayList;
public classMainActivityextendsAppCompatActivity {
privateExpandableListViewelv_main;
privateArrayListbiglist;
privateArrayList>totaltitlelist;
/*
* Android開(kāi)發(fā)中我們經(jīng)常會(huì)用listview來(lái)加載一些列表數(shù)據(jù),但有時(shí)候呢,并不能滿足我們的需求,所以我們用expandlistview來(lái)實(shí)現(xiàn)我們的功能更為方便點(diǎn)
* expandlistview(可擴(kuò)展的)主要是由組和子元素來(lái)組成的,所以呢我們就把組元素和子元素的數(shù)據(jù)都搞出來(lái)
*
*
* */
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private voidinitData() {
biglist=newArrayList<>();
biglist.add("家人");
biglist.add("同學(xué)");
ArrayList family =newArrayList<>();
family.add("父親");
family.add("母親");
ArrayList student =newArrayList<>();
student.add("張三");
student.add("李四");
totaltitlelist=newArrayList<>();
totaltitlelist.add(family);
totaltitlelist.add(student);
//不需要加這個(gè)箭頭的話,可以用這個(gè)屬性來(lái)取消
//elv_main.setGroupIndicator(null);
/* 這里涉及到了事件分發(fā),這里事件將不能被傳遞給子條目
elv_main.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
return true;//TODO 事件被消費(fèi)了}
});*/
Adapter adapter =newAdapter(biglist,totaltitlelist,this);
elv_main.setAdapter(adapter);
}
private voidinitView() {
elv_main= (ExpandableListView) findViewById(R.id.elv_main);
}
}