设计模式-adapter设计模式

效果图

adapter.gif

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.有类适配器和对象适配器两种(类适配器由于要继承被适配的类,所以可能导致目标类存在冗余的方法,所以对象适配器会比较灵活)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,978评论 25 709
  • 每日千字文28 难得假期,难得有人帮忙带孩子,这样好的时光当然是要追追剧的啦! 不过,电视被老人和孩子轮番霸占,电...
    星酉林夕阅读 368评论 0 0
  • 最适合开发人工智能的编程语言有哪些 这两年,“一只狗”AlphaGo打遍天下棋手无对手,让我们认识了什么叫人工智能...
    悠悠君子阅读 204评论 0 0
  • 纠结好久的事,也有了结果,不再用我去做选择。一些事,一些人,过去了就过去了,再纠结对谁都不好。缘分是一个很奇妙的东...
    随云桐花阅读 222评论 0 0
  • 有些人很容易被人爱 有些人却很难 正如有些人很容易爱上人 有些人却很难 百利甜酒 我只记住了第一次的味道 日后 喝...
    木子非李曰阅读 236评论 0 0

友情链接更多精彩内容