-
使用ViewHolder优化BaseAdapter的思路(如图) 需要注意几点: 1. Bean对象中封装ListView的每一行数据 2. MainActivity中创建并填充List<ItemBean> itemList; for (int i=0; i<20; i++) { itemList.add(new ItemBean(R.drawable.ic_launcher, "Title"+i, "I am an Android app debugger"+i)); } 3. 自定义适配器的构造方法中传入List<ItemBean> itemList数据 public MyAdapter(Context context, List<ItemBean> itemList) { super(); this.itemList = itemList; mInflater = LayoutInflater.from(context); } 4. getView()方法中将当前的ItemBean数据对象填充到当前convertView中 ItemBean itemBean = itemList.get(position); //得到当前行的ItemBean对象,里面包含了数据 viewHolder.imageView.setImageResource(itemBean.imageResId); viewHolder.title.setText(itemBean.title); viewHolder.content.setText(itemBean.content); return convertView;查看全部
-
ListView的适配器 首先这个适配器是继承自BaseAdapter(接上一笔记) 1. 逗比式适配器 在逗比式getView()方法中,每次都会重新创建一个新的View。然后从这个View实例中找到对应的组件进行填充数据。 2. 普通式适配器 在普通式getView()方法中,先去判断当前的View是否已经缓存过,没有缓存过才去创建。 if(convertView == null) { convertView = mInflater.inflate(R.layout.item, null); } 普通式和逗比式的区别在于判断当前View实例是否被缓存过,这样就利用了ListView的缓存机制,避免了重新创建了当前View对象。因为通过inflate()转换xml到一个view的过程需要一定的时间。 3. 文艺式适配器 文艺式getView()方法是利用了ViewHolder类,优化了inflate()和findViewById()的耗时操作。 (1)创建一个ViewHolder对象,通过ViewHolder对象,就将这些通过findViewById()找到的组件对象保存到了ViewHolder对应的组件对象中 (2)通过setTag()方法将这个viewHolder和当前的view建立联系 //这样就可以将没有缓存过的View对象创建出来,并将其每个组件保存在ViewHolder对象中。 (3)当View不为空的时候就可以通过convertView.getTag()将它所关联的viewHoloder对象取出。 (4)最后通过viewHolder中保存的组件对象设置当前的view对象 //通过ViewHolder类其实是优化了findViewById()的耗时操作查看全部
-
使用ViewHolder优化BaseAdapter思路查看全部
-
BaseAdapter (接上一笔记) 4. 创建一个自己的Adapter适配器,这一点和ViewPager以及ViewPagerFragment重写自己的Adapter适配器是相似的。 参考:Android中常用高级控件详解汇总 10-1(http://www.imooc.com/video/2574) 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; } 5. 最后要给ListView设置自己的适配器 MyAdapter myAdapter = new MyAdapter(MainActivity.this, itemList);//注意传递的参数,itemList就是前面已经填充好数据的itemList listView.setAdapter(myAdapter); 6. 以上做法可以否定了,faint!查看全部
-
BaseAdapter 1. 这个抽象类的一些方法(如图),其中getView()是比较重要的方法,可以获取指定位置item的显示内容。 2. 通常创建一个Bean类来填充ListView中的一行数据。在它的构造函数中初始化ListView一行的所有数据。 public ItemBean(int imageResId, String title, String content) { super(); this.imageResId = imageResId; this.title = title; this.content = content; } 3. 在MainActivity中,创建ListView的每行的数据,封装在一个List<ItemBean>中。 填充好数据的List<ItemBean>对象就是一个ItemBean的一个集合 itemList = new ArrayList<ItemBean>(); for (int i=0; i<20; i++) { itemList.add(new ItemBean(R.drawable.ic_launcher, "Title"+i, "I am an Android app debugger"+i)); }查看全部
-
ListView的显示和缓存机制 总结来讲: 需要才显示,显示完就被回收到缓冲池中。 1. 屏幕上滑时,先将item1回收到View缓冲池中 2. 新要显示的item8从View缓冲池中取出,并重新设置好item8所要显示的数据 3. item8显示出来查看全部
-
BaseAdapter 数据适配器adapter的作用就是建立了数据源和ListView之间的适配关系,将数据源的数据转换成了ListView能够显示的数据格式查看全部
-
LayoutInflater方法将xml文件转化为View布局。 LayoutInflater通过from()方法可以将XML布局文件转换成View对象。查看全部
-
BaseAdapter文艺式3查看全部
-
BaseAdapter文艺式2查看全部
-
BaseAdapter文艺式1查看全部
-
BaseAdapter文艺式2查看全部
-
BaseAdapter文艺式1查看全部
-
BaseAdapter普通式查看全部
-
listview适配器逗比式查看全部
举报
0/150
提交
取消