BaseAdapter
ListView的显示与缓存机制
Recycler---view缓存池需要的时候显示,显示完回收
BaseAdapter基本结构
—public int getCount():适配器中的数据集中数据的个数;
—public Object getItem(int position):获取数据集中与指定索引对应的数据项;
—public long getItemId(int position):获取指定行对应的ID;
—public View getView(int position, View convertView, ViewGroup parent):获取每一个Item的显示内容
三重进阶:
1、没有用到任何list缓存
2、使用系统提供的ConvertView对象:---convertView = mInflater.inflate(R.layout.item,null);
3、利用了listview的缓存还通过ViewHolder类的使用避免多次通过
解决重复findViewById寻找控件:
------定义一个内不类ViewHolder定义控件类
if(convertView==null){
viewHolder = new ViewHolder(); //避免静态丢失
convertView = mInflater.inflate(R.layout.item,null);
viewHolder.xxx = xxxx;
convertView.setTag(viewHolder);//建立关系
}else{
viewHolder = (ViewHolder)convertView.getTag();//得到关联对象
}
ItemBean bean = mList.get(positon); // 对应条目的数据在对应的List<ItemBean>取
viewHolder.xxx.setXxx(bean.getXxx());
System.nanoTime()//获取纳秒时间
解决数据问题
BaseAdapter支持list<?>数据:所以要创建一个数据类所以要创建一个数据类
先看BaseAdapter的实现:
package zxx.wangti.content;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import zxx.wangti.R;
/**
* 1、 在这里完成适配 2、使用HoldView 完成list的优化 3、
*/
public class ItemAdapter extends BaseAdapter {
private Context context;
private List<Bean> listBeandata;//baseadapter 不能用map<?,?>所以要创建一个数据类
private LayoutInflater minflater;
// ViewHolder用于缓存控件
class ViewHolder {
public ImageView image;
public TextView title;
public TextView message;
public TextView pag;
}
public ItemAdapter(Context context) {
this.context = context;
//模拟一条数据
listBeandata=new ArrayList<Bean>();
for (int i = 0; i < 20; i++) {
Bean mbean=new Bean();
mbean.title="这是一个title";
mbean.message="这是一个message";
mbean.pag="这是一个pag";
listBeandata.add(mbean);
}
minflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup root) {
Bean mbean=listBeandata.get(position);
ViewHolder viewholder = null;
if (convertView == null) {
viewholder = new ViewHolder();
convertView = minflater.inflate(R.layout.item, null);
viewholder.image = (ImageView) convertView.findViewById(R.id.item_image);
viewholder.title = (TextView) convertView.findViewById(R.id.item_title);
viewholder.message = (TextView) convertView.findViewById(R.id.item_message);
viewholder.pag = (TextView) convertView.findViewById(R.id.item_pag);
convertView.setTag(viewholder);
} else {
viewholder = (ViewHolder) convertView.getTag();
}
viewholder.image.setImageResource(R.drawable.ic_launcher);
viewholder.title.setText(mbean.title);
viewholder.message.setText(mbean.message);
viewholder.pag.setText(mbean.pag);
return convertView;
}
public int getCount() {
// TODO Auto-generated method stub
return 20;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
}
实现Adapter所需要的Bean类:
package zxx.wangti.content;
public class Bean {
String title;
String message;
String pag;
}
这样就可以用Activity中的listview实现适配了