recyclerview的基本用法(一)

今天,工作忙完了,写了一下recyclerview的基本用法,recyclerview 是android 5.0中新出的一个控件,可以很好的代替listview,gridview以及瀑布流,但是并没有给出相应的点击事件,点击事件要自己写,我会慢慢记录下来,下面以listview为准,写一个例子:

首先:布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:orientation="vertical"
    android:id="@+id/linearLayout">

    <!-- A RecyclerView with some commonly used attributes -->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>

</LinearLayout>
得到控件id:
mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);

设置recyclerview的方向:
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(layoutManager);

//横向为LinearLayoutManager.HORIZONTAL 纵向为LinearLayoutManager.VERTICAL

初始化数据:
ArrayList<Map<String,Object>> listdata = new ArrayList<Map<String,Object>>();
Map<String,Object> mapdata ;
for (int i = 0; i < 9; i++) {
    mapdata = new HashMap<String, Object>();
    mapdata.put("imageurl", imageurl);//url是从别的页面传过来的值
    mapdata.put("item", "item" + i);
    listdata.add(mapdata);
}
//设置adapter
adapter = new RecyclerViewAdapter(listdata,RecyclerViewActivity.this);
mRecyclerView.setAdapter(adapter);

接下来就是adapter,在RecyclerView 的另一个特点是标准化了 ViewHolder, 编写 Adapter 面向的是 ViewHoder 而不在是View 了, 复用的逻辑被封装了, 写起来更加简单。
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    // 数据集
    private ArrayList<Map<String,Object>> data;
    private Context context;
    private ViewHolder.MyItemClickListener mListener;
    private ViewHolder.MyItemLongClickListener mLongClickListener;
    public RecyclerViewAdapter(ArrayList<Map<String,Object>> datas,Context context1) {
        super();
        data = datas;
        context = context1;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view1 = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.activity_recyclerview_item, viewGroup, false);
        ViewHolder holder = new ViewHolder(view1,mListener,mLongClickListener);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Map<String,Object> mapdata = data.get(position);
        String imageurl = "",item = "";
        for(int i = 0;i<mapdata.size();i++){
                imageurl = mapdata.get("imageurl").toString();
                item = mapdata.get("item").toString();
        }

        RequestQueue requestQueue = Volley.newRequestQueue(context);
        final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
                20);
        ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
            @Override
            public void putBitmap(String key, Bitmap value) {
                lruCache.put(key, value);
            }

            @Override
            public Bitmap getBitmap(String key) {
                return lruCache.get(key);
            }
        };

        ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);
        ImageLoader.ImageListener listener = ImageLoader.getImageListener( holder.mImageView,
                R.drawable.downarrow, R.drawable.downarrow);

        imageLoader.get(imageurl, listener);
    }
    @Override
    public int getItemCount() {
        return data.size();
    }

    public void setOnItemClickListener(ViewHolder.MyItemClickListener listener) {
        this.mListener = listener;
    }

    public void setOnItemLongClickListener(ViewHolder.MyItemLongClickListener listener) {
        this.mLongClickListener = listener;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener,View.OnClickListener{
        private ImageView mImageView;
        private MyItemClickListener mListener;
        private MyItemLongClickListener mLongClickListener;
        public ViewHolder(View itemView,MyItemClickListener listener, MyItemLongClickListener longClickListener) {
            super(itemView);
            mImageView = (ImageView) itemView.findViewById(R.id.imageViewItem);
            this.mListener = listener;
            this.mLongClickListener = longClickListener;
            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);
        }

        @Override
        public void onClick(View view) {

            if (mListener != null) {
                mListener.onItemClick(view, getPosition());
            }
        }

        @Override
        public boolean onLongClick(View view) {
            if (mLongClickListener != null) {
                mLongClickListener.onItemClick(view, getPosition());
            }
            return true;
        }

        public interface MyItemClickListener {
            public void onItemClick(View view, int postion);
        }

        public interface MyItemLongClickListener {
            public void onItemClick(View view, int postion);
        }

    }
}
这就是adapter的的写法,其中包括了点击事件,在Adapter中加入相应的点击事件后要在activity中实现。
adapter.setOnItemClickListener(this);
public void onItemClick(View view, int postion) {
        Toast.makeText(RecyclerViewActivity.this, "点击了"+ postion, Toast.LENGTH_SHORT).show();
}
最后上一下图,我设置了两个recyclerview,一个纵向一个横向。

今天就介绍到这吧,希望可以有所收获。七夕节,祝大家开心。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值