这是一个很老的效果,但是之前没有在意,所以写一个例子来学习一下这个适配器的使用
首先我们来看一下效果图:
1.先看一下布局吧,布局很简单,一共三个布局,很简单,一共三个控件
2.新建一个组名类,用于组的名称管,显示整个数据源存着多少组数据
package com.example.admin.ztest;
import java.util.ArrayList;
public class GroupInfo {
private String teamName;
private ArrayList<ChildInfo> list = new ArrayList<ChildInfo>();
public String getName() {
return teamName;
}
public void setName(String teamName) {
this.teamName = teamName;
}
public ArrayList<ChildInfo> getPlayerName() {
return list;
}
public void setPlayerName(ArrayList<ChildInfo> playerName) {
this.list = playerName;
}
}
3.新建一个组员类,用于组员名称管理,也就是一个组里面存在多少组员
package com.example.admin.ztest;
public class ChildInfo {
private String playerName = "";
public String getName() {
return playerName;
}
public void setName(String playerName) {
this.playerName = playerName;
}
}
4.开始构建适配器:加载数据
package com.example.admin.ztest;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class CustomAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<GroupInfo> teamName;
public CustomAdapter(Context context, ArrayList<GroupInfo> deptList) {
this.context = context;
this.teamName = deptList;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<ChildInfo> productList = teamName.get(groupPosition).getPlayerName();
return productList.get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View view, ViewGroup parent) {
ChildInfo detailInfo = (ChildInfo) getChild(groupPosition, childPosition);
if (view == null) {
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.child_items, null);
}
TextView childItem = (TextView) view.findViewById(R.id.childItem);
childItem.setText(detailInfo.getName().trim());
return view;
}
@Override
public int getChildrenCount(int groupPosition) {
ArrayList<ChildInfo> productList = teamName.get(groupPosition).getPlayerName();
return productList.size();
}
@Override
public Object getGroup(int groupPosition) {
return teamName.get(groupPosition);
}
@Override
public int getGroupCount() {
return teamName.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isLastChild, View view,
ViewGroup parent) {
GroupInfo headerInfo = (GroupInfo) getGroup(groupPosition);
if (view == null) {
LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inf.inflate(R.layout.group_items, null);
}
TextView heading = (TextView) view.findViewById(R.id.heading);
heading.setText(headerInfo.getName().trim());
return view;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
5.主界面调用
package com.example.admin.ztest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.LinkedHashMap;
public class MainActivity extends AppCompatActivity {
private LinkedHashMap<String, GroupInfo> team = new LinkedHashMap<String, GroupInfo>();
private ArrayList<GroupInfo> deptList = new ArrayList<GroupInfo>();
private CustomAdapter listAdapter;
private ExpandableListView simpleExpandableListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// add data for displaying in expandable list view
loadData();
//get reference of the ExpandableListView
simpleExpandableListView = (ExpandableListView) findViewById(R.id.simpleExpandableListView);
// create the adapter by passing your ArrayList data
listAdapter = new CustomAdapter(MainActivity.this, deptList);
// attach the adapter to the expandable list view
simpleExpandableListView.setAdapter(listAdapter);
// setOnChildClickListener listener for child row click
simpleExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
//get the group header
GroupInfo headerInfo = deptList.get(groupPosition);
//get the child info
ChildInfo detailInfo = headerInfo.getPlayerName().get(childPosition);
//display it or do something with it
Toast.makeText(getBaseContext(), " Team And Player :: " + headerInfo.getName()
+ "/" + detailInfo.getName(), Toast.LENGTH_LONG).show();
return false;
}
});
// setOnGroupClickListener listener for group heading click
simpleExpandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
//get the group header
GroupInfo headerInfo = deptList.get(groupPosition);
//display it or do something with it
Toast.makeText(getBaseContext(), " Team Name :: " + headerInfo.getName(),
Toast.LENGTH_LONG).show();
return false;
}
});
}
// load some initial data into out list
private void loadData() {
addProduct("India", "Virat Kohli");
addProduct("India", "Mahendar Dhoni");
addProduct("India", "QRYuvraj Singh");
addProduct("India", "QEYuvraj Singh");
addProduct("India", "QWYuvraj Singh");
addProduct("Australia", "Brat Lee");
addProduct("Australia", "Hayden");
addProduct("Wustralia", "WBrat Lee");
addProduct("Wustralia", "WHayden");
}
// here we maintain team and player names
private int addProduct(String teamName, String playerName) {
int groupPosition = 0;
//check the hash map if the group already exists
GroupInfo headerInfo = team.get(teamName);
//add the group if doesn't exists
if (headerInfo == null) {
headerInfo = new GroupInfo();
headerInfo.setName(teamName);
team.put(teamName, headerInfo);
deptList.add(headerInfo);
}
// get the children for the group
ArrayList<ChildInfo> productList = headerInfo.getPlayerName();
// size of the children list
int listSize = productList.size();
// add to the counter
listSize++;
// create a new child and add that to the group
ChildInfo detailInfo = new ChildInfo();
detailInfo.setName(playerName);
productList.add(detailInfo);
headerInfo.setPlayerName(productList);
// find the group position inside the list
groupPosition = deptList.indexOf(headerInfo);
return groupPosition;
}
}