效果图
1.定义
将一种对象适配成另一种对象
2.示例
MyListView myListView = (MyListView) findViewById(R.id.myListView);
//1.模拟服务器传回数据
List<String> mDatas = new ArrayList<>();
for (int i = 0; i < 100; i++) {
mDatas.add(i+"");
}
//2.将数据转化为视图View
MyAdapter adapter = new MyAdapter(mDatas,this);
//3.将View显示在屏幕上
myListView.setAdapter(adapter);
/**
* 项目名称:MyApplication
* 类描述:转化的接口(通过该适配器将数据集合转化为MyListView需要的View)
* 创建人:woochen123
* 创建时间:2017/11/14 21:35
*/
public interface BaseAdapter {
int getCount();
View getView(int position);
}
/**
* 项目名称:MyApplication
* 类描述:
* 创建人:woochen123
* 创建时间:2017/11/14 21:39
*/
public class MyAdapter implements BaseAdapter {
private List<String> mDatas;
private Context mContext;
public MyAdapter(List<String> datas,Context context) {
this.mDatas = datas;
mContext = context;
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public View getView(int position) {
TextView textView = new TextView(mContext);
textView.setText(mDatas.get(position));
return textView;
}
}
/**
* 项目名称:MyApplication
* 类描述:
* 创建人:woochen123
* 创建时间:2017/11/14 21:25
*/
public class MyListView extends ScrollView {
LinearLayout mLinearLayout;
public MyListView(Context context) {
this(context,null);
}
public MyListView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mLinearLayout = new LinearLayout(context);
mLinearLayout.setOrientation(LinearLayout.VERTICAL);
addView(mLinearLayout,0);
}
@Override
public void addView(View child) {
mLinearLayout.addView(child);
}
public void setAdapter(BaseAdapter adapter) {
for (int i = 0; i < adapter.getCount(); i++) {
addView(adapter.getView(i));
}
}
}
3.使用
listview的适配器
4.总结
1.适配器模式可以将两种不同的类型实现进行转化
2.有类适配器和对象适配器两种(类适配器由于要继承被适配的类,所以可能导致目标类存在冗余的方法,所以对象适配器会比较灵活)