一. 核心思想
把一种接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.
解释: A和b原本是不能一起工作的, 需要和a才能正常工作, 现在b通过适配器转成a, 再传给A.
A.setAdapter(new Adapter(B)).
分类
- 对象适配
- 类适配
二. 简单实现(对象适配)
例如: 我们项目中使用TabLayout. 需要的itemView各式各样, TabLayout只需知道每组Tab返回一个View就可以了, 其它不需要关心. 但是我们能提供的数据只有String或icon等零散的数据, 怎么组装起来呢? 模仿ListView.
//适配器接口
public interface IAdapter {
//获取itemView
View getView(int position);
//获取大小
int getCount();
}
public class MyTabLayout {
IAdapter mAdapter;
public void setAdapter(IAdapter adapter){
this.mAdapter = adapter;
draw();
}
public void draw(){
for (int i = 0; i < mAdapter.getCount(); i++) {
//获取itemView, 具体绘制忽略
View itemView = mAdapter.getView(i);
}
}
}
//具体Adapter
public class TabAdapter implements IAdapter{
List<TabBean> mTabBeans; //数据源
public TabAdapter(@NonNull List<TabBean> tabBeans){
mTabBeans = tabBeans;
}
@Override
public View getView(int position) {
//创建View,赋值(忽略具体实现)
TextView view = null;
return view;
}
@Override
public int getCount() {
return mTabBeans.size();
}
}
//调用
List<TabBean> tabBeans = new ArrayList<>();
for (int i = 0; i < 3; i++) {
tabBeans.add(new TabBean();
}
IAdapter adapter = new TabAdapter(tabBeans);
tabLayout.setAdapter(adapter);
上面通过TabAdapter, 就把原本的数据 List<TabBean> 转换成了MyTabLayout 需要的itemView.
类适配是通过继承的方式适配的, java里只能单继承, 这种方式不够灵活, 一般不用, 这里就不说了.
总结: 写法不固定, 关键是理解思想, 至于优缺点, 可以在用的时候体会, 印象会更深刻.
网友评论