1. 二级列表(ExpandableListView)
①创建布局并找控件
②获取数据:网络数据、死数据
③创建适配器:10个方法必须掌握
④设置适配器
⑤父项、子项的点击事件
※setOnChildClickListener//单击子选项
※setOnGroupClickListener//单击组选项
⑥ExpandableListView的基本属性
※divider这个属性用于设置父选项之间的分割线样式
※childDivider自选项之间分割样式
※dividerHeight用于设置分割线的高度
※groupIndicator这个属性是用于控制父项前面的小箭头用的
ExpandableListView适配器的10个方法
//父项目的个数
@Override
public int getGroupCount() {
return list.size();
}
//某个父项的子项的个数
@Override
public int getChildrenCount(int groupPosition) {
return list.get(groupPosition).getChildren().size();
}
//获得某个父项
@Override
public Object getGroup(int groupPosition) {
return list.get(groupPosition);
}
//获得某个子项
@Override
public Object getChild(int groupPosition, int childPosition) {
return list.get(groupPosition).getChildren().get(childPosition);
}
//父项的id
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
//子项的id
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
//获得父项的view
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
convertView= LayoutInflater.from(context).inflate(R.layout.layout_group,null);
TextView tv_group = convertView.findViewById(R.id.tv_group);
tv_group.setText(list.get(groupPosition).getName());
return convertView;
}
//获得子项的view
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
convertView= LayoutInflater.from(context).inflate(R.layout.layout_child,null);
TextView tv_child = convertView.findViewById(R.id.tv_child);
tv_child.setText(list.get(groupPosition).getChildren().get(childPosition).getName());
return convertView;
}
//子项是否可选中,如果要设置子项的点击事件,需要返回true
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
2. ListView手动、自动加载更多
⑴ListView
①创建布局并找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
ListView优化:
⑴对convertView进行复用
⑵使用ViewHolder减少findViewById的查找
⑵ListView手动加载更多
①创建布局并找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
⑤给ListView添加一个Footer
⑥点击footer中的button加载更多:page++,获取数据
View footer = LayoutInflater.from(this).inflate(R.layout.button, null);
Button btn_add = footer.findViewById(R.id.btn_add);
lv.addFooterView(footer);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
page++;
initData();
adapter.notifyDataSetChanged();
}
});
⑶ListView自动加载更多
①创建布局并找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
⑤定义一个变量isBottom表示是否滑到底部
⑥ListView设置滑动监听
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (isBottom){
page++;
initData();
isBottom=false;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (totalItemCount>0&&totalItemCount==firstVisibleItem+visibleItemCount){
isBottom=true;
}else {
isBottom=false;
}
}
});