-
context要使用当前的Adapter的界面对象 mInflater:布局装载器对象查看全部
-
BaseAdapter基本结构 — public int getCount():适配器中数据集中数据的个数 — public Object getItem(int position):获取数据集中与指定索引对应的数据项 — public long getItemId(in position):获取指定行对应的ID — public View getView(int position,View convertView,ViewGroup parent):获取每一个Item的显示内容。 ------------------------------------------ 如图,新建 Item.xml,创建一个简单的 Item 布局。查看全部
-
ListView的显示与缓存机制 了解缓冲池的存在 如图,实际有很多数据,但局限于手机屏幕的尺寸,ListView第一次加载的时候只显示前面几条数据,当我们向上滑动的时候,Item1 就被回收到缓冲池, 同时Item8从缓冲池中被取出。 从缓冲池中取出对象的方法:View getView(int position, View convertView, ViewGroup parent)。 通过缓存机制,可以极大地节约系统资源。查看全部
-
数据适配器——BaseAdapter 数据源的来源是各种各样的,而ListView所展现的数据格式是有一定要求的,数据适配器将数据源转换成ListView可以显示的数据格式,建立了数据源和ListView的适配关系。从而将数据的来源和数据的显示进行了“解耦”,降低了程序的耦合性,让程序更加容易扩展。 适配器有很多种,而BaseAdapter是最通用的适配器。查看全部
-
通用的高效适配器的打造 按照截图的思路,我们可以将自定义的适配器封装起来,方便以后调用,去解决其他的项目问题,也就是代码复用。只需要修改ViewHolder的成员变量(也就是Item的控件)、修改对ViewHolder成员的赋值(ItemBean的成员变量的getter方法)就可以了,非常方便。查看全部
-
对于一些细微的程序比较效率用获取系统纳秒时间方法 关键代码: long start =System.nanoTime();程序开始前计时 ... long end =System.nanoTime();结束计时 long dValue=end-start;计算查值 mSumTime +=dValue统计时间 log.d("xys",String.valueof(mSunTime));打印出时间 viewholder 作为findviewbyid的一个转接,避免系统大量的遍历提高效率。查看全部
-
1.创建ViewHolder类,含有所需的各种控件,为了避免重复的findViewById() class ViewHolder{ public ImageView tv_image; public TextView tv_title; public TextView tv_content; } 2.判断convertView是否为空 空:用setTag()方法将ViewHolder与其绑定 非空:用getTag()方法,取出相关的ViewHolder 重点: (1)convertView为空的时候,通过setTag()将ViewHolder与convertView绑定,每一个空的convertView都将会把Item的三个控件保存到ViewHolder里面。之后通过getTag()方法可以快速找到一个convertView所对应的ViewHolder对象,然后通过ViewHolder的成员变量找到了对应的三个控件,从而避免了用findViewById()去实例化对象。 (2)convertView不为空的时候,使用getTag()方法,取出它所关联的ViewHolder对象,同时也找到l对应控件。 3.之后再创建 ItemBean 对象,为viewHolder的三个控件赋值: ItemBean bean = mylist.get(position); viewHolder.imageView.setImageResource(bean.getItemImageid()); viewHolder.title.setText(bean.getItemTitle()); viewHolder.content.setText(bean.getItemContent()); 4.return convertView查看全部
-
普通式与逗比式的不同在于convertView的使用上: 普通式对convertView进行了处理,充分利用了ListView的缓存机制,避免了重复创建View对象,因为通过LayoutInflater对象的inflate()方法创建View对象是非常耗时且耗资源的。 通过简单的判断: if (convertView == null){ convertView = myInflater.inflate(R.layout.item, null); } ,就可以避免大量创建View对象,从而对 getView()做了较好的优化。 ----------------------------------- 摘自评论区: 如果将findViewById写在if(convertView==null)中的话,运行后listview的顺序是混乱的。 普通式,要慎用。 系统每次调用 findViewById()的时候都会遍历一次视图树,当视图树很复杂的时候就会消耗大量的时间。查看全部
-
“逗比式”:只使用了getView()的position参数,完全没有利用另外两个参数。本质上说,是“没有利用到ListView的缓存机制”。每次使用getView(),都通过 LayoutInflater 创建新的View对象view,并在view中找到相应的控件、去给它设置相应的值,完全没有利用到 ListView 的缓存机制,这样是对资源的极大浪费,不建议使用。查看全部
-
创建一个新的类 MyAdapter 继承 BaseAdapter 作为自定义适配器。 声明数据源 List<ItemBesn> mylist; 构造有参的构造方法,让数据源和适配器产生关联: public MyAdapter(List<ItemBean> mylist) { this.mylist = mylist; } 改写四个继承的方法。 getCount():返回ListView需要显示的数据数量。 getItem():取出索引所对应的一个数据项。 getItemId( ):取出数据项所对应的索引。 getView():返回每一项的显示内容。查看全部
-
ItemBean的使用: 我们通常创建一个Bean对象来表示listView中一行显示的数据。 创建List<ItemBean> itemBeanList=new ArrayList<>(); 通过for循环来添加数组内容,如图所示 在这之前,我们要先创建一个类来封装要显示的三个数组itembean类 public class ItemBean { //私有属性 private int ItemImageid; private String ItemTitle; private String ItemContent; //无参构造方法 public ItemBean() { } //非原则,为了方便后面创建对象,这里又定义了有参的构造方法。 public ItemBean(int itemImageid, String itemTitle, String itemContent) { ItemImageid = itemImageid; ItemTitle = itemTitle; ItemContent = itemContent; }查看全部
-
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的显示内容 如图创建一个见得item布局来让listview加载查看全部
-
ListView的显示与缓存机制 了解缓冲池的存在 如图,实际有很多数据,但局限于手机屏幕的尺寸,ListView第一次加载的时候只显示前面几条数据,当我们向上滑动的时候,Item1 就被回收到缓冲池, 同时Item8从缓冲池中被取出。 从缓冲池中取出对象的方法:View getView(int position, View convertView, ViewGroup parent)。 通过缓存机制,可以极大地节约系统资源。查看全部
-
数据适配器——BaseAdapter 数据源的来源是各种各样的,而ListView所展现的数据格式是有一定要求的,数据适配器将数据源转换成ListView可以显示的数据格式,建立了数据源和ListView的适配关系。从而将数据的来源和数据的显示进行了“解耦”,降低了程序的耦合性,让程序更加容易扩展。 适配器有很多种,而BaseAdapter是最通用的适配器。查看全部
-
viewHolder 文艺式查看全部
举报
0/150
提交
取消