RecycleView的使用步骤和样例


1、RecyclerView:5.0之后的控件,扩展优化,吸收了
2、ViewHolder./RecyclerView的adapter与BaseAdapter不同
3、RecyclerView的adapter:只负责创建holder,给holder设置展示的数据。
步骤分析:1、先添加依赖库,File-->project stru-->选中module,Dependes--->加号-->选择recyvlerview的包,添加
创建相关页面Activity--layout:并且实例化相应控件
        2、自定义item布局
        3、创建实体类
        4、搭建数据集:List<实体类>
        5、Adapter:ViewHolder:实例化控件
            自定义Adapter步骤:
             a、先创建一个ViewHolder的内部类MyHolder继承于ViewHolder,在内部类中实例化控件属性
             b、让主类RecyclePhoneAdapter继承于RecycleView下的adapter并且给Adapter加上内部类的泛型
 主要为了重写3个方法时候不用再强转返回值类型(不设置泛型返回值为父类)
             c、新建自定义adapter完成后要在对应主Java代码中( RecyclePhoneAdapter adapter=new RecyclePhoneAdapter(this,list);)使用
 并且设置展示样式( //设置布局管理器
                rv_phone.setLayoutManager(new LinearLayoutManager(this));//像ListView一样展示
                rv_phone.setAdapter(adapter);)
                ps; //使用系统自带默认分割线
                rv_phone.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));

     自定义Adapter代码样例:
/**自定义adapter的作用,创建ViewHolder,给holder设置数据展示
 * 继承RecycleView.Adapter<当前类的泛型.MyHolder>,重写里边三个方法
 * Created by Administrator on 2017/2/20.
 * 步骤:1、先创建一个ViewHolder的内部类MyHolder继承于ViewHolder,在内部类中实例化控件属性
 *      2、让主类RecyclePhoneAdapter继承于RecycleView下的adapter并且给Adapter加上内部类的泛型
 *          主要为了重写3个方法时候不用再强转返回值类型(不设置泛型返回值为父类)
 *       3、新建自定义adapter完成后要在对应主Java代码中( RecyclePhoneAdapter adapter=new RecyclePhoneAdapter(this,list);)使用
 *          并且设置展示样式( //设置布局管理器
                rv_phone.setLayoutManager(new LinearLayoutManager(this));//像ListView一样展示
                rv_phone.setAdapter(adapter);)
                ps; //使用系统自带默认分割线
                rv_phone.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
 */
public class RecyclePhoneAdapter extends RecyclerView.Adapter<RecyclePhoneAdapter.MyHolder> implements View.OnClickListener{
    private Context pContext;
    private List<PhoneEntity> list;
    private LayoutInflater inflater;
    private OnItemClick ItemClickListener=null;
    //给自定义接口一个实例,并提供下边set方法
    public void setItemClickListener(OnItemClick itemClickListener) {
        ItemClickListener = itemClickListener;
    }

    //有参的构造函数,并实例化布局加载器
    public RecyclePhoneAdapter(Context pContext, List<PhoneEntity> list) {
        this.pContext = pContext;
        this.list = list;
        inflater=LayoutInflater.from(pContext);
    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //第二个参数是容器 第三个参数:true使用父布局的布局参数,false使用自己的布局参数
        View view=inflater.inflate(R.layout.activity_phone_list,parent,false);//使用自定义布局格式
        MyHolder holder=new MyHolder(view);//将自定义的布局传给MyHolder内置处理
        holder.itemView.setOnClickListener(this);//为当前item设置点击事件
        return new MyHolder(view);
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        //获取对应位置的数据, 不能再此重新实例化
        PhoneEntity phone=list.get(position);
        holder.phone_name.setText(phone.getName());
        holder.img_phone.setImageResource(phone.getImg());
        holder.phone_price.setText(phone.getPrice());
        holder.phone_counter.setText(phone.getCountNum());
        holder.itemView.setTag(position);//将item位置设置成标签,

    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    //继承自定义接口,重写自定义接口中的方法,给item添加点击事件

    @Override
    public void onClick(View v) {
        //调用自定义接口中的方法,给当前item添加点击事件
        if(ItemClickListener!=null){
            ItemClickListener.onitemclick(Integer.parseInt(v.getTag().toString()));
        }

    }

    //创建内部类继承于RecycleView.ViewHolder实例化自定义布局中的属性
    class MyHolder extends RecyclerView.ViewHolder{
        private ImageView img_phone;
        private TextView phone_name;
        private TextView phone_price;
        private  TextView phone_counter;

        public MyHolder(View itemView) {
            super(itemView);
            img_phone= (ImageView) itemView.findViewById(R.id.img_phone);
            phone_name= (TextView) itemView.findViewById(R.id.phone_name);
            phone_price= (TextView) itemView.findViewById(R.id.phone_price);
            phone_counter= (TextView) itemView.findViewById(R.id.phone_counter);
        }
    }
//    自定义接口,通过触发不同位置item的方式,调用接口中的方法,实现点击事件的监听效果
    public interface OnItemClick{
        void onitemclick(int position);
    }
上一篇:设计模式----工厂设计模式


下一篇:thinkPHP框架实现的短信接口验证码功能示例