ItemBean.java
package com.imooc.baseadaptertest;
public class ItemBean {
public int itemImageResid;
public String itemTitle;
public String itemContent;
public ItemBean(int itemImageResid, String itemTitle, String itemContent) {
this.itemImageResid = itemImageResid;
this.itemTitle = itemTitle;
this.itemContent = itemContent;
}
}
MainActivity.java
package com.imooc.baseadaptertest;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.lv_main);
List<ItemBean> dataList = new ArrayList<>();
// 创建假数据
for (int i = 0; i < 20; i++) {
dataList.add(new ItemBean(
R.mipmap.ic_launcher,
"我是标题" + i,
"我是内容" + i));
}
// 设置适配器
listView.setAdapter(new MyAdapter(this, dataList));
}
}
MyAdapter.java
package com.imooc.baseadaptertest;
public class MyAdapter extends BaseAdapter {
private LayoutInflater mLayoutInflater;
// 映射数据
private List<ItemBean> mDataList;
private long mSumTime;
public MyAdapter(Context context, List<ItemBean> list) {
mLayoutInflater = LayoutInflater.from(context);
mDataList = list;
}
// 获取数据量
@Override
public int getCount() {
return mDataList.size();
}
// 获取对应ID项对应的Item
@Override
public Object getItem(int position) {
return mDataList.get(position);
}
// 获取对应项ID
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
-----------------------------------------------------------------
① // 逗比式 24409529
① // 获取纳秒时间 更加精确
① long start = System.nanoTime();
① // 由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null
① View view = mLayoutInflater.inflate(R.layout.item, null);
① // 实例化控件
① ImageView itemImage = (ImageView) view.findViewById(R.id.iv_image);
① TextView itemTitle = (TextView) view.findViewById(R.id.tv_title);
① TextView itemContent = (TextView) view.findViewById(R.id.tv_content);
① // 取出bean对象
① ItemBean bean = mDataList.get(position);
① // 设置控件的数据
① itemImage.setImageResource(bean.itemImageResid);
① itemTitle.setText(bean.itemTitle);
① itemContent.setText(bean.itemContent);
① long end = System.nanoTime();
① long dValue = end - start;
① mSumTime += dValue;
① // 输出每次getView消耗的时间和
① Log.d("xys", String.valueOf(mSumTime));
① return view;
① // 逗比式
-----------------------------------------------------------------
② // 普通式 19271161
② // 获取纳秒时间 更加精确
② long start = System.nanoTime();
② if (convertView == null) {
② //由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null
② convertView = mLayoutInflater.inflate(R.layout.item, null);
② }
② ImageView itemImage = (ImageView) convertView.findViewById(R.id.iv_image);
② TextView itemTitle = (TextView) convertView.findViewById(R.id.tv_title);
② TextView itemContent = (TextView) convertView.findViewById(R.id.tv_content);
② // 取出bean对象
② ItemBean bean = mDataList.get(position);
// 设置控件的数据
② itemImage.setImageResource(bean.itemImageResid);
② itemTitle.setText(bean.itemTitle);
② itemContent.setText(bean.itemContent);
② long end = System.nanoTime();
② long dValue = end - start;
② mSumTime += dValue;
② // 输出每次getView消耗的时间和
② Log.d("xys", String.valueOf(mSumTime));
② return convertView;
② // 普通式
-----------------------------------------------------------------
③ // 文艺式 16325820
③ // 获取纳秒时间 更加精确
③ long start = System.nanoTime();
③ ViewHolder holder = null;
③ if (convertView == null) {
③ holder = new ViewHolder();
③ //由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null
③ convertView = mLayoutInflater.inflate(R.layout.item, null);
③ holder.img = (ImageView) convertView.findViewById(R.id.iv_image);
③ holder.title = (TextView) convertView.findViewById(R.id.tv_title);
③ holder.content = (TextView) convertView.findViewById(R.id.tv_content);
③ convertView.setTag(holder);
③ } else {
③ holder = (ViewHolder) convertView.getTag();
③ }
③ //取出bean对象
③ ItemBean bean = mDataList.get(position);
③ //设置控件的数据
③ holder.img.setImageResource(bean.itemImageResid);
③ holder.title.setText(bean.itemTitle);
③ holder.content.setText(bean.itemContent);
③ long end = System.nanoTime();
③ long dValue = end - start;
③ mSumTime += dValue;
③ //输出每次getView消耗的时间和
③ Log.d("xys", String.valueOf(mSumTime));
③ return convertView;
③ // 文艺式
-----------------------------------------------------------------
}
// ViewHolder用于缓存控件
class ViewHolder{
public ImageView img;
public TextView title;
public TextView content;
}
}
ViewHolder优化BaseAdapter
1.创建bean对象,用于封装数据
2.在构造方法中初始化用于映射的数据源list
3.创建ViewHolder类,创建布局映射关系
4.判断convertView,为空则创建,并设置tag,
否则通过tag来取出 ViewHolder
5.给ViewHolder中的控件设置数据