适配器模式就是将某一些对象转成我们需要的适配的对象。分为两种一种是类适配器,还有一种是对象适配器
举个例子:以前公司只支持人民币付钱,后来走向国际化支持美元
一般写法
public class RMBAdapter {
private float mRmb;
public RMBAdapter(float rmb) {
this.mRmb = rmb;
}
//获得人人民币
public float getRmb() {
return mRmb;
}
//获得美元
public float getUsd() {
return mRmb / 4f;
}
}
测试
public class Client {
public static void main(String[] args) {
RMBAdapter adapter = new RMBAdapter(800);
float rmb = adapter.getRmb();
float usd = adapter.getUsd();
System.out.println(rmb + "/" + usd);
}
}
类适配器使用
IUsedAdapter
public interface IUsdAdapter {
float getUsd();
}
RMBAdapter
public class RMBAdapter {
private float mRmb;
public RMBAdapter(float rmb) {
this.mRmb = rmb;
}
//获得人人民币
public float getRmb() {
return mRmb;
}
}
UsdApater
public class UsdAdapter extends RMBAdapter implements IUsdAdapter{
private float mRmb;
public UsdAdapter(float rmb) {
super(rmb);
this.mRmb=rmb;
}
@Override
public float getUsd() {
return mRmb/4f;
}
}
测试
public class Client {
public static void main(String[] args) {
UsdAdapter adapter=new UsdAdapter(600);
float rmb = adapter.getRmb();
float usd = adapter.getUsd();
System.out.println(rmb + "/" + usd);
}
}
对象适配器只是修改了UsdAdapter
public class UsdAdapter implements IUsdAdapter {
private RMBAdapter mAdapter;
public UsdAdapter(RMBAdapter adapter) {
this.mAdapter=adapter;
}
@Override
public float getUsd() {
return mAdapter.getRmb()/4f;
}
}
测试
public class Client {
public static void main(String[] args) {
RMBAdapter rmbAdapter=new RMBAdapter(700);
UsdAdapter adapter=new UsdAdapter(rmbAdapter);
float rmb = rmbAdapter.getRmb();
float usd = adapter.getUsd();
System.out.println(rmb + "/" + usd);
}
}
2.再举个例子,做个简单的listview
Adapter接口
public interface Adapter {
//获得数量
int getCount();
//view
View getView(int position, ViewGroup parent);
}
BaseAdapter
public class BaseAdapter implements Adapter {
private List<String> mDatas;
private Context mContext;
public BaseAdapter(Context context, List<String> datas) {
this.mContext = context;
this.mDatas = datas;
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public View getView(int position, ViewGroup parent) {
TextView textView = (TextView) LayoutInflater.from(mContext).inflate(R.layout.item_main, parent,false);
textView.setText(mDatas.get(position));
return textView;
}
}
PeakmainListView继承于ScrollView
public class PeakmainListView extends ScrollView {
private LinearLayout mContainer;
private Adapter mAdapter;
public PeakmainListView(Context context) {
this(context,null);
}
public PeakmainListView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public PeakmainListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContainer=new LinearLayout(context);
mContainer.setOrientation(LinearLayout.VERTICAL);
addView(mContainer,0);
}
@Override
public void addView(View child) {
mContainer.addView(child);
}
public void setAdapter(BaseAdapter adapter) {
this.mAdapter = adapter;
int count = mAdapter.getCount();
for (int i = 0; i < count; i++) {
View view = mAdapter.getView(i, mContainer);
addView(view);
}
}
}
使用
mListView = (PeakmainListView) findViewById(R.id.peakmain_lv);
for (int i=0;i<100;i++){
items.add(i+"");
}
mListView.setAdapter(new BaseAdapter(this,items));