今天,工作忙完了,写了一下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,一个纵向一个横向。
![]()
今天就介绍到这吧,希望可以有所收获。七夕节,祝大家开心。