效果圖
1.定義
將一種對象適配成另一種對象
2.示例
MyListView myListView = (MyListView) findViewById(R.id.myListView);
//1.模擬服務器傳回數(shù)據(jù)
List<String> mDatas = new ArrayList<>();
for (int i = 0; i < 100; i++) {
mDatas.add(i+"");
}
//2.將數(shù)據(jù)轉化為視圖View
MyAdapter adapter = new MyAdapter(mDatas,this);
//3.將View顯示在屏幕上
myListView.setAdapter(adapter);
/**
* 項目名稱:MyApplication
* 類描述:轉化的接口(通過該適配器將數(shù)據(jù)集合轉化為MyListView需要的View)
* 創(chuàng)建人:woochen123
* 創(chuàng)建時間:2017/11/14 21:35
*/
public interface BaseAdapter {
int getCount();
View getView(int position);
}
/**
* 項目名稱:MyApplication
* 類描述:
* 創(chuàng)建人:woochen123
* 創(chuàng)建時間: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
* 類描述:
* 創(chuàng)建人:woochen123
* 創(chuàng)建時間: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.適配器模式可以將兩種不同的類型實現(xiàn)進行轉化
2.有類適配器和對象適配器兩種(類適配器由于要繼承被適配的類景鼠,所以可能導致目標類存在冗余的方法氨肌,所以對象適配器會比較靈活)