几种adapter的加载优化方式

来源:互联网 发布:js怎样仿写shift 编辑:程序博客网 时间:2024/05/25 23:26

滴水穿石

在动手之前脑中从头到尾过几次,然后下手时自然顺畅,而且对进度的把握也能更加明了。

加载优化方式

今天在bugly突然看到有一个oom的crash,然后查看之后发现某个地方少了点优化,综合之前做的几种,就在这里统一整理一下。

1.继承BaseAdapter.

这里是需要重写几个方法:

@Overridepublic int getCount() {    return list.size();}@Overridepublic Object getItem(int position) {    return list.get(position);}@Overridepublic long getItemId(int position) {    return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {}
本来按照之前的优化,只在getView里面判断null==convertview,如果为空则重新inflate,忘记tag重用了,现在优化后是这样的。

@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {    Holder holder ;    if (null==convertView) {        holder=new Holder();        convertView = ((Activity) _context).getLayoutInflater().inflate(R.layout.list, null);        holder.textView=(TextView)convertView.findViewById(R.id.item_name);        holder.imageView=(ImageView)convertView.findViewById(R.id.img);        convertView.setTag(holder);    }else{        holder=(Holder)convertView.getTag();    }    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(DeviceInfo.getScreenWidth(_context),DeviceInfo.getScreenWidth(_context));//删掉了某些宽高比例    holder.imageView.setLayoutParams(params);    if(SystemConfig.getCityInHashmap(list.get(position).getName())==0){        ImageLoader.getInstance().displayImage("drawable://default.png"), holder.imageView, _options);    }else{        ImageLoader.getInstance().displayImage("drawable://xx.png"), holder.imageView, _options);    }    holder.textView.setText(list.get(position).getName());    return convertView;}public class Holder{    TextView textView;    ImageView imageView;}
这样的话就不用大量的产生imageview了。

第二种:继承RecyclerView.Adapter<ViewPagerAdapter.ViewHolder>,这里Holder加入到了方法里面。

public class ViewHolder extends RecyclerView.ViewHolder{    TextView textView;    public ViewHolder(View itemView) {        super(itemView);        textView=(TextView)itemView.findViewById(R.id.item_info);    }}

这里这个ViewHolder需要继承系统RecyclerVIew.ViewHolder,但是大家看到上面没有,继承的adapter是适配的当前adapter的ViewHolder,其他的地方大同小异了。实现父类方法

@Overridepublic int getItemCount() {    return list.size();}
@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {}
@Overridepublic void onBindViewHolder(ViewHolder holder, final int position) {}


只是这个时候我们只需在onCreateViewHolder里面进行控件的绑定。

@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    View view = mLayoutInflater.inflate(R.layout.item_home, parent, false);    ViewHolder viewHolder = new ViewHolder(view);    viewHolder.mLinearLayout=(LinearLayout)view.findViewById(R.id.item);}

然后在onBindViewHolder里面使用holder.xxx即可。

3.继承PagerAdapter,也是实现父类方法,然后具体操作基本看方法名也知道该怎么做了,只不过我这边将那个实体类放到了外面,方便其他的重用,这里就不贴出来了。

目前项目中就用到了这几种简单的,欢迎大家提出不适之处。有相互学习的朋友加QQ一起学习呗:125642014. ~_~





0 0
原创粉丝点击