Android中级:recyclerView的使用

 


本文包含recycleView中基本使用(item不可点击)+item可点击的案例。

案例一:item不可点击

基本步骤:

/**
 * recycelView的使用
 * 1 initView,获取recycleView
 * 2 initData()获取数据
 * 3 initRecycle();
 *          1 new Layoutmanager,并设置属性
 *          2 new RecyleAdapter
 *          3 recycleViwe.setLayoutManager()+recycleView.setAdapter
 * 4 MyRecyleAdapter
 *          重写oncreateHolder()+onBindViewHolder()+MyRecyclerViewHolder
 *          1 MyRecyclerViewHolder,构造方法+item中控件名称
 *          2 重写oncreateHolder()new Holeder  +  findviewByIdz找到item中的控件
 *   

基本的使用和listview差不多,

区别一:在创建adapter的时候  继承的adapter<>要确定泛型


区别二:在创建adapter的时候需要重写oncreateHolder()+onBindViewHolder() 2个方法,

oncreateHolder(),创建viewHolder;

onBindViewHolder(),将数据与holder做绑定,

区别三:xml中定义RecyclerView 要用全路径

android.support.v7.widget.RecyclerView
,不然报错(inflater....)


代码地址:  http://pan.baidu.com/s/1geo6Gt9


 

 

以下内容参考大神:【张鸿洋的博客】

http://blog.csdn.net/lmj623565791/article/details/45059587

实现listView+GridView+StaggeredGrid

 利用recycleView实现以上3中情况,一般需要以下4步,中间2不可以不需要

layoutManager.setOrientation(mLinearLayoutManager);
recyclerView.setItemAnimator(itemAnimator);//
recyclerView.addItemDecoration(mDividerItemDecoration);
recyclerView.setAdapter(adapter);
itemAnimator:<pre class="plain" name="code">https://github.com/gabrielemariotti/RecyclerViewItemAnimators

 

listview:

 recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        /**1  setItemAnimator*/
        DefaultItemAnimator itemAnimator =new DefaultItemAnimator();
        /**下面几种是导入的libary*/
//        ScaleInOutItemAnimator itemAnimator = new ScaleInOutItemAnimator(recyclerView);/**item由小变大*/
//        SlideInOutLeftItemAnimator itemAnimator = new SlideInOutLeftItemAnimator(recyclerView);/**item由左往右*/
//        SlideInOutRightItemAnimator itemAnimator = new SlideInOutRightItemAnimator(recyclerView);/**item由右向左*/
//        SlideInOutBottomItemAnimator itemAnimator = new SlideInOutBottomItemAnimator(recyclerView);/*item由下往上**/
//        SlideInOutTopItemAnimator itemAnimator = new SlideInOutTopItemAnimator(recyclerView);/**item由上往下*/
//        SlideScaleInOutRightItemAnimator itemAnimator = new SlideScaleInOutRightItemAnimator(recyclerView);/**item由右往左 由小变大*/

        recyclerView.setItemAnimator(itemAnimator);

        /**2 setLayoutManager*/
//        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

        /**3  addItemDecoration*/
        recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));

        /**4  setAdapter*/
        adapter = new ListGridAdapter(context,list);
        recyclerView.setAdapter(adapter);

  /**设置点击事件*/
        adapter.setOnItemClickListener(new ListGridAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(ListActivity.this, "clcik", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongClick(View view, int position) {
                Toast.makeText(ListActivity.this, "long clcik", Toast.LENGTH_SHORT).show();
            }
        });

adapter:
public class ListGridAdapter extends RecyclerView.Adapter<ListGridAdapter.MyHolder> {

    private static final String TAG = "ListGridAdapter";
    public Context context;
    public List list;


    public ListGridAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;

    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(context).inflate(R.layout.item_list_grid,parent,false);
        MyHolder holder = new MyHolder(itemView);
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyHolder holder, final int position) {


        holder.textView.setText((String)list.get(position));
        /**如果有回调,则设置点击事件*/
        if (mOnItemClickListener !=null){
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    /**pos = position
                     * v = holder.itemView*/
//                    int pos = holder.getLayoutPosition();
//                    mOnItemClickListener.onItemClick(holder.itemView,pos);

                    mOnItemClickListener.onItemClick(v,position);
                }
            });
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
//                    int pos = holder.getLayoutPosition();
//                    mOnItemClickListener.onItemLongClick(v,pos);
                    mOnItemClickListener.onItemLongClick(v, position);
                    return true;
                    /**return :true if the callback consumed the long click, false otherwise;
                     * true:事件被setOnLongClickListener 消耗掉
                     * false:事件没有被消耗掉,转而有setOnClickListener消耗*/
                }
            });
        }
    }


    @Override
    public int getItemCount() {
        return list.size();
    }

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


    /**设置回调*/
    public interface OnItemClickListener{
        public void onItemClick(View view,int position);
        public void onItemLongClick(View view,int position);
    }
    public OnItemClickListener mOnItemClickListener;
    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
        this.mOnItemClickListener = mOnItemClickListener;
    }

    /**添加+删除数据*/
    public void addItem(int position){

        list.add(position,"insert one");
        notifyItemInserted(position);/**插入的item在集合list中的位置position,也就是它的角标*/
    }
    public void removeItem(int position){

        list.remove(position);
        notifyItemRemoved(position);
    }

}

gridView 与listview类似:只是GridLayoutManager
 GridLayoutManager layoutManager = new GridLayoutManager(context,3);
        /**gridview水平方向显示,item的width最好>100dp便于观察*/
//        GridLayoutManager layoutManager =new GridLayoutManager(context,3,GridLayoutManager.HORIZONTAL,false);
        recyclerView.setLayoutManager(layoutManager);

 
 
 



 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值