RecyclerView 与ListView、GridView的区别


文章部分代码参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2004.html


RecyclerView Adapter相对于ListView Adapter:

1、它将数据、排列方式、数据的展示方式都分割开来

2、它没有ListView、GridView中的setOnItemClickListener方法。

AdapterView拥有OnItemClickListener方法,就像View拥有OnClickListener一样

RecyclerView并没有OnItemClickListener方法。

public interface OnItemClickListener {
    void onItemClick(AdapterView<?> var1, View var2, int var3, long var4);
}

ListAdapter中的靠getView来获取每个itemView: 初始化view 、初始化Holder、设置Holder数据都在getView中

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    if (mInfos.size() == 0) {
        return convertView;
    }

    final HolderT holder;
    if (null == convertView) {
        convertView = inflateView();
        holder = initHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (HolderT) convertView.getTag();
    }

    setHolderDatas(position, holder, getItem(position));

    return convertView;
}
   static class ViewHolder {
       public TextView mTextView;
   }

   @Override
   public ViewHolder initHolder(View view) {
       final ViewHolder holder;
       holder = new ViewHolder();
       holder.mTextView = (TextView) view.findViewById(R.id.text);

       return holder;
   }


   @Override
public void setHolderDatas( int position, ViewHolder holder, TagKeyValue item) {
       holder.mTextView.setText(item);
       holder.mTextView.setOnClickListener(this);
}

而RecyclerView则将这些分开出处理,将初始化view、初始化holder放在onCreateViewHolder中,

而将设置Holder数据放在onBindViewHolder中

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

public  String[] datas = null;

private OnRecyclerViewItemClickListener mOnItemClickListener = null;

    public MyAdapter(String[] datas,OnRecyclerViewItemClickListener mOnItemClickListener) {       

        this.datas = datas;

this.mOnItemClickListener= mOnItemClickListener;  

    }

    //定义接口

public static interface OnRecyclerViewItemClickListener {  

        void onItemClick(View view , DataModel data);

}


    //创建新View,被LayoutManager 所调用

    @Override    

    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {    

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);  

        ViewHolder vh = new ViewHolder(view);              

        //将创建的View注册点击事件,这部分也可以放到onBindViewHolder中(感觉更好),如下面紫色背景文字 

        view.setOnClickListener(this);       

        return vh;   

    }


   //将数据与界面进行绑定的操作   

   @Override    

   public void onBindViewHolder(ViewHolder viewHolder, int position) {        

       viewHolder.mTextView.setText(datas[position]);  

       //将数据保存在itemView的Tag中,以便点击时进行获取        

       viewHolder.itemView.setTag(datas.get(position));

       //viewHolder.itemView注册点击事件,只有RecyclerView.ViewHolder才有itemview

       viewHolder.itemView.setOnClickListener(this);   

   }    

   //获取数据的数量    

   @Override    

   public int getItemCount() {        

       return datas.length;  

   }


   @Override    

   public void onClick(View v) {       

       if (mOnItemClickListener != null) {           

           //注意这里使用getTag方法获取数据           

            mOnItemClickListener.onItemClickv,  (DataModel)v.getTag() );       

       }     

   }   


   //自定义的ViewHolder,持有每个Item的的所有界面元素    

   public static class ViewHolder extends RecyclerView.ViewHolder {        

       public TextView mTextView;       

       public ViewHolder(View view){       

           super(view);            

           mTextView = (TextView) view.findViewById(R.id.text);        

       }    

   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值