基于ViewHolder优化的BaseAdapt
来源:互联网 发布:少女时代减肥 知乎 编辑:程序博客网 时间:2024/05/22 05:18
利用优化的BaseAdapter来实现一个ListView效果
1.主activity布局文件如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv_main"></ListView></RelativeLayout>
2.新建一个滚动条目的布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:id="@+id/iv_image" android:src="@mipmap/ic_launcher"/> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:layout_toRightOf="@id/iv_image" android:text="title" android:gravity="center" android:textSize="20sp" android:id="@+id/tv_titlt"/> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:layout_below="@id/tv_titlt" android:text="content" android:gravity="center_vertical" android:textSize="16sp" android:id="@+id/tv_content" android:layout_toRightOf="@id/iv_image" /></RelativeLayout>3.新建一个javaBean类用于封装要显示的控件
package com.weixi.baseadapter;/** * Created by 风华国乐 on 2016/8/3. */public class ItemBean { //封装要显示的控件 public int ItemImageResid; public String ItemTitle; public String ItemContent; public ItemBean(int itemImageResid, String itemTitle, String itemContent) { ItemImageResid = itemImageResid; ItemTitle = itemTitle; ItemContent = itemContent; }}
4.新建Adapter类继承BaseAdapter(适配器)
package com.weixi.baseadapter;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 java.util.List;/** * Created by 风华国乐 on 2016/8/3. */public class MyAdapter extends BaseAdapter { private List<ItemBean> mlist; private LayoutInflater mInflater; public MyAdapter(Context context,List<ItemBean> list){ mlist=list; //context是要使用Adapter的界面对象,mInflater是布局装载器对象 mInflater=LayoutInflater.from(context); } //返回所需要的数据数量 @Override public int getCount() { return mlist.size(); } //返回所对应的数据项 @Override public Object getItem(int position) { return mlist.get(position); } //返回索引对应的数据项 @Override public long getItemId(int position) { return position; } //返回每一项的显示内容 @Override public View getView(int position, View convertView, ViewGroup parent) { //逗逼式,每次都是通过Inflater对象创建一个新的View,并在View中找到相应控件设置相应值,完全没有利用ListView的缓存机制,是对资源的极大浪费// View view=mInflater.inflate(R.layout.item,null);// ImageView imageView= (ImageView) view.findViewById(R.id.iv_image);// TextView title= (TextView) view.findViewById(R.id.tv_titlt);// TextView content= (TextView) view.findViewById(R.id.tv_content);//// ItemBean bean=mlist.get(position);// imageView.setImageResource(bean.ItemImageResid);// title.setText(bean.ItemTitle);// content.setText(bean.ItemContent); //return view; //普通式,利用了ListView的缓存机制// if (convertView==null){// //View并未被实例化,缓冲池中无缓存// convertView=mInflater.inflate(R.layout.item,null);// }// ImageView imageView= (ImageView) convertView.findViewById(R.id.iv_image);// TextView title= (TextView) convertView.findViewById(R.id.tv_titlt);// TextView content= (TextView) convertView.findViewById(R.id.tv_content);//// ItemBean bean=mlist.get(position);// imageView.setImageResource(bean.ItemImageResid);// title.setText(bean.ItemTitle);// content.setText(bean.ItemContent);// return convertView; //文艺式,在文艺式中,我们要避免两个耗时操作,一是重复获取view,二是重复获取findViewById //不仅 利用了ListView的缓存,更通过ViewHolder类来实现显示数据的视图的缓存,避免多次通过findViewById寻找控件 //首先,创建一个ViewHolder类 class ViewHolder{ public ImageView imageView; public TextView title; public TextView content; } ViewHolder viewHolder; if (convertView==null){ viewHolder=new ViewHolder(); viewHolder.imageView=(ImageView) convertView.findViewById(R.id.iv_image); viewHolder.title=(TextView) convertView.findViewById(R.id.tv_titlt); viewHolder.content=(TextView) convertView.findViewById(R.id.tv_content); convertView=mInflater.inflate(R.layout.item,null); //通过setTag方法将ViewHolder与converview进行关联 convertView.setTag(viewHolder); }else { viewHolder= (ViewHolder) convertView.getTag(); } ItemBean bean=mlist.get(position); viewHolder.imageView.setImageResource(bean.ItemImageResid); viewHolder.title.setText(bean.ItemTitle); viewHolder.content.setText(bean.ItemContent); return convertView; }}5.在主Activity中添加数据,绑定适配器
package com.weixi.baseadapter;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends ActionBarActivity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<ItemBean> itemBeanList=new ArrayList<>(); for (int i = 0; i <20 ; i++) { itemBeanList.add(new ItemBean( R.mipmap.ic_launcher, "我是标题"+i, "我是内容"+i )); } listview= (ListView) findViewById(R.id.lv_main); listview.setAdapter(new MyAdapter(this,itemBeanList)); }}
创建思路
以上内容均出自慕课网eclipse_xu的视频
0 0
- 基于ViewHolder优化的BaseAdapt
- listview的优化---viewHolder
- ListView的优化--ViewHolder
- ListView的ViewHolder优化
- 关于viewHolder的优化
- ViewHolder的listview的优化
- ListView的优化:convertView + viewHolder
- ViewHolder优化BaseAdapter的思路:
- ListView优化--ViewHolder的使用
- 一个优化极点的ViewHolder
- 关于ViewHolder的终极优化
- ListView的优化(ViewHolder)
- ViewHolder优化
- ViewHolder优化
- listview的优化及viewholder的使用
- listview的优化---viewHolder的封装
- android适配器之基于BaseAdapt自定义简单适配器
- android ListView的优化之 static ViewHolder
- android studio recyclerview长按删除
- 集合----顺序存储的实现
- PostConstruct
- 组内挑战赛:Lab 3
- 【大话数据结构&算法】快速排序算法(Java/C实现源码)
- 基于ViewHolder优化的BaseAdapt
- 利用jQuery的$.event.fix函数统一浏览器event事件处理
- coco2dx对象统计及内存查漏
- 排序序列之直接插入排序与希尔排序
- PAT-A 1037. Magic Coupon
- opencv学习(8)形态学图像处理
- 字符串匹配的KMP做法
- poj2299 Ultra-QuickSort 树状数组
- java使用idea、dubbox、cxf构建web service