数据适配器BaseAdapter

什么是数据适配器:通过数据适配器,我们可以将数据源和UI控件联系起来。
数据适配器adapter的作用就是将多种多样的数据源适配成listView可以读取的模式
1.降低程序的耦合性
2.容易扩展

最常用的数据适配器:BaseAdapter

ListView的显示和缓存机制
总结来讲:
需要才显示,显示完就被回收到缓冲池中。
1. 屏幕上滑时,先将item1回收到View缓冲池中
2. 新要显示的item8从View缓冲池中取出,并重新设置好item8所要显示的数据
3. item8显示出来


public View getView(int position, View convertView, ViewGroup parent) {
View view = mInflater.inflate(R.layout.item, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
TextView title = (TextView) view.findViewById(R.id.tv_title);
TextView content = (TextView) view.findViewById(R.id.tv_content);
ItemBean itemBean = itemList.get(position); //得到当前的这个ItemBean对象
//然后用这个itemBean填充item转化过来的view
imageView.setImageResource(itemBean.imageResId);
title.setText(itemBean.title);
content.setText(itemBean.content);
return view;
}

没有利用baseadapter的缓存机制

通过判断BaseAdapter中的getView()方法的参数convertView,我们可以利用ListView给我们提供的缓冲机制。但是还是有瓶颈,就是findViewById()方法。


使用ViewHolder类来优化BaseAdapter中的getView()方法:
1. 在BaseAdapter的继承类中先创建一个ViewHolder类,里面的成员变量对应我们ListView中一个View的所有控件;
2. 判断getView()方法的一个参数convertView是否为空;
3. 通过VIew的setTag()方法将ViewHolder和convertView绑定;
4. 通过View的getTag()方法从convertView中取出与之关联的ViewHolder对象
5. 通过ViewHolder对象找到对应控件

ViewHolder的作用是将ListView中每个View中的每个控件都关联上了getView()中提供的convertView,从而也为这些控件提供了ListView的缓冲机制,进而避免了用大量的findViewById()创建这些小的控件,因为既然ListView中的每个View可以通过缓冲重复利用,那么这些View中的控件也就可以了,ViewHolder就是起到了这个承接着的作用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中数据适配器的核心代码通常包括以下几个部分: 1. 定义适配器类:通常继承自BaseAdapter或其子类,实现其中的抽象方法,如getView()、getItem()、getItemId()等。 2. 实例化适配器:在Activity或Fragment中实例化适配器对象,并将其与ListView或RecyclerView等控件绑定。 3. 设置数据源:将数据源(如List或Cursor)传递给适配器,以便适配器能够将数据显示在控件上。 以下是一个简单的ListView适配器的核心代码示例: ``` public class MyAdapter extends BaseAdapter { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); } TextView textView = convertView.findViewById(R.id.text_view); textView.setText(mData.get(position)); return convertView; } } ``` 在这个示例中,我们定义了一个MyAdapter类,继承自BaseAdapter,并实现了其中的抽象方法。在构造方法中,我们将数据源List传递给适配器。在getView()方法中,我们使用LayoutInflater加载item_layout布局文件,并将数据显示在TextView上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值