博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Baseadapter 和 ViewHolder的使用
阅读量:4676 次
发布时间:2019-06-09

本文共 3967 字,大约阅读时间需要 13 分钟。

昨晚学习了徐大神的关于BaseAdapter的讲解,让我受益匪浅特来博客留下印记

说到baseadapter大家一定都不陌生,下面这张图就展示了数据、listview、baseadapter

之间的关系。我们可以看出baseadapter是用来将不同数据,经过转化使其成为listview能够显示的格式

,再提供给listview展示的数据适配器(listview对展示的数据是有要求的)

t2A9A

想要更详细的了解baseadapter请自行百度吧。

下面就用一个例子描述下baseadapter的具体用法

我们可以创建一个MyAdapter 继承BaseAdapter

实现其四个基本方法:

// 获取数据量    @Override    public int getCount() {        return null;    }    // 获取对应ID项对应的Item    @Override    public Object getItem(int position) {        return null;    }    // 获取对应项ID    @Override    public long getItemId(int position) {        return null;    }

 以上三个方法比较简单,功能明确,也有注释

下面介绍getview方法:

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

用于获取每一个item的显示内容

参数一:position 是指当前dataset的位置,通过getCount和getItem来使用。

参数二:conertView 是指可以重用的视图,即刚刚出队的视图。

参数三:parent应该就是list。

看的云里雾里是不是?!这就对了不如直接上手试试

public class MyAdapter extends BaseAdapter {    private LayoutInflater mLayoutInflater;    // 映射数据    private List
mDataList; private long mSumTime; public MyAdapter(Context context, List
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) { // 文艺式 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //获取纳秒时间 更加精确 ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); //由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null convertView = mLayoutInflater.inflate(R.layout.tasklistitem, null); holder.title = (TextView) convertView.findViewById(R.id.task_title); holder.explain = (TextView) convertView.findViewById(R.id.task_explain); holder.price = (TextView) convertView.findViewById(R.id.task_price); holder.faraway = (TextView) convertView.findViewById(R.id.task_distance); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // 取出bean对象 ItemBean bean = mDataList.get(position); // 设置控件的数据 holder.title.setText(bean.itemTitle); holder.explain.setText(bean.itemContent); holder.price.setText(bean.itemPrice); holder.faraway.setText(bean.itemFaraway); // 输出每次getView消耗的时间和 Log.d("xys", String.valueOf(mSumTime)); return convertView; // 文艺式 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>16325820 } // ViewHolder用于缓存控件 class ViewHolder{ public TextView title;//标题 public TextView explain;//说明 public TextView price;//价格 public TextView faraway;//距离 }}

 

 创建完了MyAdapter

在layout下添加一个布局文件(如果是自己新创建的app测试一下的话可以main.xml)

名字随意这里就叫  

list.xml 了

创建ItemBean.java

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;    }}

为list创建对应的java文件

在onCreat方法中插入如下代码

//绑定数据  ListView listView = (ListView) findViewById(R.id.lv_main);        List
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));

完成上面的操作就可以去看看运行效果了(如果不是新创建的app还要先到androidMainfest中注册下新页面)

 

转载于:https://www.cnblogs.com/wobeinianqing/p/5054385.html

你可能感兴趣的文章
~(取反操作符)的探索
查看>>
C++学习随笔之八:抽象与建模----类的设计技术
查看>>
博客系列
查看>>
会放弃的人生才会更洒脱
查看>>
dubbo 使用 filter 报错解决
查看>>
NOIP2018:The First Step
查看>>
asp.net mvc网站的发布与IIS配置
查看>>
JS创建Ajax的XMLHttpRequest对象的通用方法
查看>>
postgresql全文检索语法
查看>>
语音转写平台-非实时语音分割
查看>>
collections 模块常用方法学习
查看>>
HDU 5832 A water problem 大数取余
查看>>
微软官方中文新书《Windows Phone 7应用开发指南 》出版
查看>>
Python实现无向图最短路径
查看>>
《结网》—— 读后总结
查看>>
windows 的文件夹映射实现
查看>>
初始函数与函数的参数
查看>>
Java PDF转换成图片并输出给前台展示
查看>>
C++取止运算符重载
查看>>
此生对我影响最大的三位老师
查看>>