基于ViewHolder优化的BaseAdapt
2016-08-03 20:37
169 查看
利用优化的BaseAdapter来实现一个ListView效果
1.主activity布局文件如下
2.新建一个滚动条目的布局文件
4.新建Adapter类继承BaseAdapter(适配器)
创建思路
![](https://img-blog.csdn.net/20160803205254492?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以上内容均出自慕课网eclipse_xu的视频
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的视频
相关文章推荐
- Android:BaseAdapter优化之ViewHolder 显示系统已经安装应用并打开
- [置顶] ListView 优化篇:从 BaseAdapter 到 BaseViewHolder
- Android中的自定义Adapter(继承自BaseAdapter)——与系统Adapter的调用方法一致——含ViewHolder显示效率的优化
- 代码优化——抽象ViewHolder和BaseAdapter
- Android中的自定义Adapter(继承自BaseAdapter)——与系统Adapter的调用方法一致——含ViewHolder显示效率的优化
- Android中的自定义Adapter(继承自BaseAdapter)——与系统Adapter的调用方法一致——含ViewHolder显示效率的优化(转)
- Android中的自定义Adapter(继承自BaseAdapter)——与系统Adapter的调用方法一致——含ViewHolder显示效率的优化
- 基于RecyclerView的BaseAdapter、ViewHolder、OnItemClickListener联合使用
- 35、拦截黑名单、ViewHolder、对listView的优化、SQLiteOpenHelper、数据库的增删改查 listView&BaseAdapter、按钮变更(button_select)
- KanKan甄选,BaseAdapter我要对你说,ViewHolder你懂得,性能优化必读
- BaseAdapter深入学习,不规则listview,ListView加载性能优化ViewHolder
- [置顶] ListView 优化篇:从 BaseViewHolder 到面向 Holder 的思想
- listview + Viewholder + CheckBox 优化listview
- 【处女作】android中的ListView结合BaseAdapter实例 ,加入ViewHolder实现高性能ListView
- listview加载性能优化ViewHolder
- android之 listview加载性能优化ViewHolder
- convertView优化ListView性能 ViewHolder中介 Github 简明入门指南思维导图
- [转]listview加载性能优化ViewHolder
- 加载性能优化ViewHolder
- Android:ListView、BaseAdapter、convertView、ListView优化及事件、notifyDataSetChanged()