Android开发中代码的一些优化

RecyclerView相关:

  1. Recyclerview 加载图片的时候相信大家一般都会在 adapter 的 onBindViewHolder 中这样使用
    Glide.with(context).load(url).into(imageView);
    但是这样会有一个小小的问题,就是 Glide 会为每个 Item 创建一个 RequestManger 对象( Glide.with(context) 函数的作用就是创建 RequestManger )。因此我们可以在 Fragment 或者 Activity 中创建好 RequestManger 对象把它作为 RecyclerviewAdapter 的构造函数的参数传递进来,而不是传递 Context 对象。
    在 Fragment 或者 Activity 中:
 mAdapter = new MemberAdapter(Glide.with(this), mList);

在你的RecyclerviewAdapter中:

private RequestManger mGlide;
public  MemberAdapter(RequestManager glide, List<MemberInfo> list) {
      mGlide = glide;
      mList = list;
 }
  ...
  @Override
  public void onBindViewHolder(final MemberHolder memberHolder, int position) {
      memberHolder.itemView.setTag(position);
      MemberInfo member = memberList.get(position);
      if(member == null) return;
      BmobFile portalFile = member.getMemberPortalFile();
      if(portalFile == null){
      mGlide.load(member.getMemberPortalFile().getUrl())
          .centerCrop()
          .crossFade()
          .into(memberHolder.portalImg);
       }
  } 
  1. 为 Recyclerview 的 item 添加 Listener
    最容易想到的就是在 onBindViewHolder 函数中为每个 item 设置 OnClickListener,然后在 onClick 中设置自己的回调。但是这种情况会为每个 ViewHolder 创建了 OnClickListener 的实例,如下面的代码所示。
@Override
  public void onBindViewHolder(final MemberHolder memberHolder, int position) {
      memberHolder.itemView.setTag(position);
      MemberInfo member = memberList.get(position);
      if(member == null) return;
      memberHolder.itemView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               mOnRecyclerViewItemClickListener.onItemClick(v,position);
           }
       });  
  } 

因此,可以做点优化,让 Adapter 实现 OnClickListener 接口或者 ViewHolder 实现 OnClickListener 接口,所有的 ViewHolder 公用一个 OnClickListener。
Adapter 中实现 OnclickListerner:

public class MemberAdapter extends RecyclerView.Adapter<MemberHolder> implements View.OnClickListener{
   ...
   @Override
   public MemberHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View itemView;
       ...
       MemberHolder holder = new MemberHolder(itemView,viewType);
       itemView.setOnClickListener(this);//一定要在创建holder之后设置监听
       return  holder;
   }
   @Override
   public void onBindViewHolder(final MemberHolder memberHolder, final int position) {
       memberHolder.itemView.setTag(position);
       ...
   }
   @Override
   public void onClick(View v) {
       if (mOnRecyclerViewItemClickListener != null)
       mOnRecyclerViewItemClickListener.onItemClick(v, (Integer) v.getTag());
   }
}

ViewHolder 中实现 OnClickListener(MemberHolder 是 MemberAdapter 的内部类):

public class MemberHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public MemberHolder(View itemView,int viewType)  {
        super(itemView);
        ...      
        itemView.setOnClickListener(this);

    }
    @Override
    public void onClick(View v) {
    if (mOnRecyclerViewItemClickListener != null)
        mOnRecyclerViewItemClickListener.onItemClick(v, (int) v.getTag());
    }
}

还有可以在 Activity 或者 Fragment 中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一.常用控件的使用方法 1.TextView match_parent 由父布局来决定当前控件的大小。wrap_c...
    努力生活的西鱼阅读 5,005评论 5 0
  • 生活本来就不容易,而我们的不努力只会让生活变得更加无赖 前几天依据《Android群英传》的学习写了一篇笔记是关于...
    AmatorLee阅读 9,130评论 7 23
  • Tangram是阿里出品、用于快速实现组合布局的框架模型,在手机天猫Android&iOS版 内广泛使用 该框架提...
    wintersweett阅读 8,727评论 0 1
  • 我的人生轨迹又开始转了,以前不知道自己写什么现在就更不知道了,清晨睁开眼,第一个想法就是自己要改变,不曾想过这个想...
    米宝的爸爸阅读 1,472评论 0 0
  • 人类在地球上每个角落几乎皆能立足。甚至在那些不毛之地,人类也能设法开采那里的资源——狩猎或者淘金。同时,人类在不断...
    行走小九阅读 1,950评论 0 0

友情链接更多精彩内容