BaseAdapter使用与优化
来源:互联网 发布:linux搭建hadoop 编辑:程序博客网 时间:2024/05/18 20:06
BaseAdpter自由度很高,能实现很多需求,十分值得学习.
这是listview的Item的布局
实现BaseAdpter首先得创建继承BaseAdpter类
public class MyAdapter extends BaseAdapter{private List<ItemContent> list;private LayoutInflater inflater;private Context context;ItemContent content; //item封装对象@Overridepublic int getCount() {// TODO 自动生成的方法存根return 0; //return list.size();得到list长度}@Overridepublic Object getItem(int position) {// TODO 自动生成的方法存根return null; // <span style="white-space:pre"></span>return list.get(position);得到list指定position位置item@Overridepublic long getItemId(int position) {// TODO 自动生成的方法存根return 0; //return position; 得到当前item位置}@Overridepublic View getView(int position, View convertView, ViewGroup parent) { //返回控件// TODO 自动生成的方法存根return null;}
<strong>getView 耗时写法</strong>
<strong></strong><pre name="code" class="java">public View getView(int position, View convertView, ViewGroup parent) {// TODO 自动生成的方法存根content = list.get(position); //得到当前item封装类对象View view =inflater.inflate(R.layout.listitem, null); //加载布局ImageView imageView=(ImageView) view.findViewById(R.id.imageView1);TextView tv= (TextView) view.findViewById(R.id.textView1);Button button=(Button) view.findViewById(R.id.button);imageView.setImageResource(content.image); tv.setText(content.text);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(context, "click", 0).show();}});return view;
}
上述这样写代码虽然简短,但每个item都得重新加载布局和findviewbyid,对手机负担较大十分影响性能。
所以推荐用下面这种优化方式 添加ViewHolder内部类find控件和判断convertView 是否已被加载,这样所以的初始化只有进行一次就够了,对性能的优化显著提升
public View getView(int position, View convertView, ViewGroup parent) {// TODO 自动生成的方法存根content = list.get(position); //得到当前item封装类对象ViewHolder viewHolder;if (convertView == null) { //只有null时才会加载布局 viewHolder = new ViewHolder();convertView = inflater.inflate(R.layout.listitem, null); // 缓存 ,不重复创建viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);viewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);viewHolder.button=(Button) convertView.findViewById(R.id.button);convertView.setTag(viewHolder);//设置标签}else {viewHolder=(ViewHolder) convertView.getTag();viewHolder.imageView.setImageResource(content.image); viewHolder.tv.setText(content.text);viewHolder.button.setOnClickListener(new OnClickListener() @Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(context, "click", 0).show();}});return convertView;}class ViewHolder { // 防止findviewbyid重复使用ImageView imageView;TextView tv;Button button;}
0 0
- BaseAdapter使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- 【J】BaseAdapter的使用与优化
- android baseadapter使用与优化 博客链接
- 数据适配器BaseAdapter的使用与优化
- BaseAdapter(数据适配器)的使用与优化
- ListView与BaseAdapter优化
- BaseAdapter优化使用
- 优化使用的BaseAdapter
- BaseAdapter使用ViewHolder优化
- Android ListView使用BaseAdapter与ListView的优化
- Android ListView使用BaseAdapter与ListView的优化
- Android ListView使用BaseAdapter与ListView的优化
- Android ListView使用BaseAdapter与ListView的优化
- Codeforces Round #346 (Div. 2) C. Tanya and Toys
- 堆和栈
- HDU 1875 畅通工程再续
- hdu1596 find the safest road--多源最短路径
- Codeforces Round #346 (Div. 2) B. Qualifying Contest
- BaseAdapter使用与优化
- VS2010+OpenCV的SDI应用——(一)打开图像
- C++泛型编程总结(二)
- 网络:NSURLConnection队列
- POJ-1236-Network of Schools【强连通分量】【缩点】
- 杭电1008
- rails中使用ajax
- 面向对象
- 网络:NSURLConnection 缓存