滴水穿石
在动手之前脑中从头到尾过几次,然后下手时自然顺畅,而且对进度的把握也能更加明了。
加载优化方式
今天在bugly突然看到有一个oom的crash,然后查看之后发现某个地方少了点优化,综合之前做的几种,就在这里统一整理一下。
1.继承BaseAdapter.
这里是需要重写几个方法:
@Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) {}本来按照之前的优化,只在getView里面判断null==convertview,如果为空则重新inflate,忘记tag重用了,现在优化后是这样的。
@Override public 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
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,其他的地方大同小异了。实现父类方法
@Override public int getItemCount() { return list.size(); }
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {}
@Override public void onBindViewHolder(ViewHolder holder, final int position) {}
@Override public 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. ~_~