0
点赞
收藏
分享

微信扫一扫

Android设计模式系列-适配器模式,kotlin可变数组

程序员阿狸 2022-03-19 阅读 41

public interface ListAdapter {

public int getCount();

Object getItem(int position);

long getItemId(int position);

View getView(int position, View convertView, ViewGroup parent);

boolean isEmpty();

}

抽象类BaseAdapter,我省略其他代码,只列出两个方法,以作示意:

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {

// ... ...

public View getDropDownView(int position, View convertView, ViewGroup parent) {

return getView(position, convertView, parent);

}

public boolean isEmpty() {

return getCount() == 0;

}

}

ArrayAdapter对List<T>进行封装成ListAdapter的实现,满足ListView的调用:

public class ArrayAdapter<T> extends BaseAdapter implements Filterable {

private List<T> mObjects;

//我只列出这一个构造函数,大家懂这个意思就行

public ArrayAdapter(Context context, int textViewResourceId, T[] objects) {

init(context, textViewResourceId, 0, Arrays.asList(objects));

}

private void init

Android设计模式系列-适配器模式,kotlin可变数组

(Context context, int resource, int textViewResourceId, List<T> objects) {

mContext = context;

mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

mResource = mDropDownResource = resource;

mObjects = objects; //引用对象,也是表达了组合优于继承的意思

mFieldId = textViewResourceId;

}

public int getCount() {

return mObjects.size();

}

public T getItem(int position) {

return mObjects.get(position);

}

public View getView(int position, View convertView, ViewGroup parent) {

return createViewFromResource(position, convertView, parent, mResource);

}

// ... ...

}

我们就如此成功的把List<T>作为数据源以ListView想要的目标接口的样子传给了ListView,同理CursorAdapter也是一模一样的道理,就不写具体代码了。

适配器本身倒是不难,但是提供了解决不兼容问题的惯用模式。?

关于什么时候使用适配器模式,大概有三种情况:

最后

最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2020-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。

还有?高级架构技术进阶脑图、高级进阶架构资料?帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

Android设计模式系列-适配器模式,kotlin可变数组

Android设计模式系列-适配器模式,kotlin可变数组

一起互勉~

举报

相关推荐

0 条评论