前言
本章节开始学习使用各种适配器——适配器是用来渲染列表类控件必须的,类似pytorch的datalset,适配器是用来加载数据处理数据用的
一、BaseAdapter
- 最基本的一个适配器可以配合spinner,Listview,GridView来一起使用,主要针对列表控件使用,如下是一个基本的适配器声明。
//基本适配器的使用
//----基本适配器主要用来自定义一下列表视图的
// 1.首先继承我们的基本适配器类
public class PlanetAdapter extends BaseAdapter {
private Context mContext;
private int mLayoutId;
private ArrayList<Planet> mPlanetList;
private int mBackground;
//2.完成构造函数,传入需要处理的数据集合
public PlanetAdapter(Context context, int layout_id, ArrayList<Planet> planet_list, int background) {
//简单的说:Context负责Activity,Service,Intent,资源,Package和权限。
mContext = context;
//布局文件的id
mLayoutId = layout_id;
//数据文件列表
mPlanetList = planet_list;
//背景颜色
mBackground = background;
}
//3.获取数据项的个数
@Override
public int getCount() {
return mPlanetList.size();
}
@Override
public Object getItem(int arg0) {
return mPlanetList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
//4.获取每项的展示视图,并对每项的内部控件进行业务处理
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
//在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。
// 不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;
// 而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。
// 这里首先加载一个视图
convertView = LayoutInflater.from(mContext).inflate(mLayoutId, null);
holder.ll_item = convertView.findViewById(R.id.ll_item);
holder.iv_icon = convertView.findViewById(R.id.iv_icon);
holder.tv_name = convertView.findViewById(R.id.tv_name);
holder.tv_desc = convertView.findViewById(R.id.tv_desc);
//将视图持有者保持到转换视图里
convertView.setTag(holder);
} else {
//获取到上次保持的视图持有者
holder = (ViewHolder) convertView.getTag();
}
// 提取列表是文字信息赋值给布局文件的相关属性
Planet planet = mPlanetList.get(position);
holder.iv_icon.setImageResource(planet.image);
holder.tv_name.setText(planet.name);
holder.tv_desc.setText(planet.desc);
//将标记的视图返回,所以保存了,下次不用从资源文件再次加载布局文件了
return convertView;
}
// 定义一个视图持有者,以便重复使用列表项的视图资源
public final class ViewHolder {
LinearLayout ll_item;
ImageView iv_icon;
TextView tv_name;
TextView tv_desc;
}
}
- 使用适配器
private void showList() {
// 从布局文件中获取名叫vs_list的占位视图
ViewStub vs_list = findViewById(R.id.vs_list);
vs_list.inflate(); // 展开占位视图
// 下面通过列表视图展示行星信息
ListView lv_hello = findViewById(R.id.lv_hello);
PlanetAdapter adapter = new PlanetAdapter(this, R.layout.item_list,
Planet.getDefaultList(), Color.WHITE);
lv_hello.setAdapter(adapter);
}
二、PagerAdapter
- Pageradapter是针对翻页控件所使用的一种适配器,基本方法和baseadapter类似
// 1.声明一个页面适配器继承自PagerAdapter
public class ImagePagerAdapater extends PagerAdapter
private Context mContext; // 声明一个上下文对象