接续昨天,今天要讲的是ExpandableListView的主体拉,首先创一个java档,我命名为MsExpandableListAdapter并implements ExpandableListAdapter,很明显看出来这就是要来设定ExpandableList的Adapter,实作後会出现一堆函数,可以先全部新增,再依自己需求作删减,这里我主要有用到几个比较重要的函数。不过首先先设定好建构元
public class MsExpandableListAdapter implements ExpandableListAdapter {
private ArrayList<Group> gData;
private ArrayList<ArrayList<Content>> iData;
private Context mContext;
public MsExpandableListAdapter(ArrayList<Group> gData,ArrayList<ArrayList<Content>> iData, Context mContext) {
this.gData = gData;
this.iData = iData;
this.mContext = mContext;
}
接者以下的函数我都在各个功能旁打上注解了,在函数的名称上也取的很帮助理解其功能。
//取得组的大小
@Override
public int getGroupCount() {
return gData.size();
}
//取得子类的大小
@Override
public int getChildrenCount(int groupPosition) {
return iData.get(groupPosition).size();
}
//取的组的资料
@Override
public Object getGroup(int groupPosition) {
return gData.get(groupPosition);
}
//取得子类的资料
@Override
public Object getChild(int groupPosition, int childPosition) {
return iData.get(groupPosition).get(childPosition);
}
//取得指定组的位置id
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
//取得指定子类的位置id
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
//组和子元素是否有稳定的ID,也就是底层资料的改变不会影响到它们。
@Override
public boolean hasStableIds() {
return true;
}
//设定子类别是否可以选择
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
private static class ViewHolderGroup{
private TextView group_name;
}
private static class ViewHolderItem{
private TextView language_name;
}
//取得组的View,内包含创建
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ViewHolderGroup groupHolder;
//convertView负责存已建立的View
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.language_title,
parent, false);
groupHolder = new ViewHolderGroup();
groupHolder.group_name = (TextView) convertView.findViewById(R.id.title_name);
convertView.setTag(groupHolder);
}else{
groupHolder = (ViewHolderGroup) convertView.getTag();
}
groupHolder.group_name.setText(gData.get(groupPosition).getName());
return convertView;
}
//取得子类的View,内包含创建
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ViewHolderItem itemHolder;
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(
R.layout.language_content, parent, false);
itemHolder = new ViewHolderItem();
itemHolder.language_name = (TextView) convertView.findViewById(R.id.content_name);
convertView.setTag(itemHolder);
}else{
itemHolder = (ViewHolderItem) convertView.getTag();
}
itemHolder.language_name.setText(iData.get(groupPosition).get(childPosition).getName());
return convertView;
}
最後就是运用前一天的前置作业设定资料并绑上Adapter。
public class MainActivity extends AppCompatActivity {
private ArrayList<Group> gData = null;
private ArrayList<ArrayList<Content>> iData = null;
private ArrayList<Content> lData = null;
private Context mContext;
private ExpandableListView language_list;
private MsExpandableListAdapter msAdapter = null;
private String Title[]={"请选择语言","请选择性别"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
language_list = (ExpandableListView) findViewById(R.id.ep1);
gData = new ArrayList<Group>();
iData = new ArrayList<ArrayList<Content>>();
gData.add(new Group("请选择语言"));
gData.add(new Group("请选择性别"));
lData = new ArrayList<Content>();
lData.add(new Content("繁体中文"));
lData.add(new Content("英文"));
lData.add(new Content("法文"));
lData.add(new Content("日文"));
lData.add(new Content("韩文"));
iData.add(lData);
lData = new ArrayList<Content>();
lData.add(new Content("男"));
lData.add(new Content("女"));
iData.add(lData);
msAdapter = new MsExpandableListAdapter(gData,iData,mContext);
language_list.setAdapter(msAdapter);
//组的按钮事件
language_list.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
Toast.makeText(MainActivity.this,Title[groupPosition],Toast.LENGTH_SHORT).show();
//需 return false 才能展开子类
return false;
}
});
//子类的按钮事件
language_list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
String select = iData.get(groupPosition).get(childPosition).getName();
gData.get(groupPosition).setName(select);
//收起子类栏位
language_list.collapseGroup(groupPosition);
return true;
}
});
}
}
ExpandableList就大致介绍到这里,谢谢大家。
<<: Day 26 - 实战演练 — Notifier 、Notification
Keyword: Android Studio,AVD Manager 到Day6完成第一个KMM专...
铁人赛的精神-毅力 终於来到铁人赛的最後一天,当然要来回顾一下这30天发生的点滴及感想罗~ 从Day...
恩,标题不知道怎麽下成中文 在之前的范例里,示范了如何用coroutine做一次性的网路请求,并交结...
机器学习最终回 网路资源总集合 那麽也到了我们『Machine Learning With Me ,...
OOCSS 也是一种设计模式 它强调两点 结构与样式分离 容器与内容分离 在我们介绍 容器与内容分离...