RecyclerView的那点事儿
RecyclerView
控件簡介
- ListView的升級版
- LinearLayoutManager
- GridLayoutManager
- StaggeredGridLayoutManager
- 定制Item動畫,指定Item之間的分隔線
RecyclerView相關的重要類
- Adapter
- ViewHolder
- LayoutManager
- ItemDecoration
- ItemAnimator
添加RecyclerView控件依賴包
Android Studio開發工具,在本項目的build.gradle文件中添加
compile 'com.android.support:recyclerview-v7:23.1.1'如果是eclipse的話,下載jar包,放到lib下,一般都會自動的build path,檢查下即可。
如何下載jar ?
在SDK Manager中下載Support Library
sdk\extras\android\support\v7\recyclerview\libs
為Recycler準備數據
package demo.turing.com.materialdesignwidget.recyclerView;import java.util.ArrayList;import demo.turing.com.materialdesignwidget.recyclerView.model.SampleModel;/*** MyApp** @author Mr.Yang on 2016-03-30 20:21.* @version 1.0* @desc*/ public class SimulatorData {public static ArrayList<SampleModel> getSampleModelData(int size) {ArrayList<SampleModel> sampleData = new ArrayList<SampleModel>(size);for (int i = 0; i < size; i++) {sampleData.add(new SampleModel("新的列表項< " + i + " >"));}return sampleData;}} package demo.turing.com.materialdesignwidget.recyclerView.model;/*** MyApp** @author Mr.Yang on 2016-03-30 20:23.* @version 1.0* 對應Item中藥顯示的數據項*/ public class SampleModel {private String text;public SampleModel(String text) {this.text = text;}public String getText() {return text;}public void setText(String text) {this.text = text;} }繪制列表項之間的分隔線
package demo.turing.com.materialdesignwidget.recyclerView;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View;/*** MyApp** @author Mr.Yang on 2016-03-30 20:37.* @version 1.0* 分隔條*** DividerItemDecoration https://gist.github.com/alexfu/0f464fc3742f134ccd1e*/ public class DividerItemDecoration extends RecyclerView.ItemDecoration {// 默認分隔條Drawable資源的ID,使用系統自帶的private static final int[] ATTRS = new int[]{android.R.attr.listDivider};public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;private Drawable mDivider;private int mOrientation;public DividerItemDecoration(Context context, int orientation) {// 使用TypedArray裝載定義的ATTRSfinal TypedArray a = context.obtainStyledAttributes(ATTRS);// 獲取系統提供的分隔條Drawable對象mDivider = a.getDrawable(0);// 回收TypedArray所占用的空間a.recycle();setOrientation(orientation);}/*** 設置item的顯示 水平 or 垂直** @param orientation*/public void setOrientation(int orientation) {if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {throw new IllegalArgumentException("invalid orientation");}mOrientation = orientation;}@Overridepublic void onDraw(Canvas c, RecyclerView parent) {if (mOrientation == VERTICAL_LIST) {drawVertical(c, parent);} else {drawHorizontal(c, parent);}}public void drawVertical(Canvas c, RecyclerView parent) {final int left = parent.getPaddingLeft();final int right = parent.getWidth() - parent.getPaddingRight();final int childCount = parent.getChildCount();for (int i = 0; i < childCount; i++) {final View child = parent.getChildAt(i);RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();final int top = child.getBottom() + params.bottomMargin;final int bottom = top + mDivider.getIntrinsicHeight();mDivider.setBounds(left, top, right, bottom);mDivider.draw(c);}}public void drawHorizontal(Canvas c, RecyclerView parent) {final int top = parent.getPaddingTop();final int bottom = parent.getHeight() - parent.getPaddingBottom();final int childCount = parent.getChildCount();for (int i = 0; i < childCount; i++) {final View child = parent.getChildAt(i);final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();final int left = child.getRight() + params.rightMargin;final int right = left + mDivider.getIntrinsicHeight();mDivider.setBounds(left, top, right, bottom);mDivider.draw(c);}}@Overridepublic void getItemOffsets(Rect outRect, int itemPosition,RecyclerView parent) {if (mOrientation == VERTICAL_LIST) {outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());} else {outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);}}}實現Adapter
package demo.turing.com.materialdesignwidget.recyclerView.adapter;import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import java.util.ArrayList; import java.util.Random;import demo.turing.com.materialdesignwidget.R; import demo.turing.com.materialdesignwidget.recyclerView.SimulatorData; import demo.turing.com.materialdesignwidget.recyclerView.model.SampleModel;/*** MyApp** @author Mr.Yang on 2016-03-30 21:03.* @version 1.0* @desc*/ public class SampleRecyclerAdapter extends RecyclerView.Adapter<SampleRecyclerAdapter.ViewHolder> {// 模擬數據private ArrayList<SampleModel> sampleData = SimulatorData.getSampleModelData(20);/*** 用于創建控件** @param parent* @param viewType* @return*/@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// 獲得列表項控件(LinearLayer對象)// list_basic_item.xml布局文件中只包含一個<LinearLayer>標簽,// 在該標簽中包含了一個<TextView>標簽, item是LinearLayout對象View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_basic_item, parent, false);ViewHolder viewHolder = new ViewHolder(item);return viewHolder;}/*** 為控件設置數據** @param holder* @param position*/@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {// 獲取當前item中顯示的數據final SampleModel rowData = sampleData.get(position);// 設置要顯示的數據holder.textViewSample.setText(rowData.getText());// 設置tagholder.itemView.setTag(rowData);}@Overridepublic int getItemCount() {return sampleData.size();}/*** 刪除指定的Item** @param position*/public void removeData(int position) {sampleData.remove(position);// 通知RecyclerView控件某個Item已經被刪除notifyItemRemoved(position);}/*** 在指定位置添加一個新的Item** @param positionToAdd*/public void addItem(int positionToAdd) {sampleData.add(positionToAdd, new SampleModel("新的列表項" + new Random().nextInt(10000)));// 通知RecyclerView控件插入了某個ItemnotifyItemInserted(positionToAdd);}/*** 對應Item中的控件*/public static class ViewHolder extends RecyclerView.ViewHolder {private final TextView textViewSample;public ViewHolder(View itemView) {super(itemView);textViewSample = (TextView) itemView.findViewById(R.id.textViewSample);}}}完成使用RecyclerView控件的最后工作
package demo.turing.com.materialdesignwidget.recyclerView;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView;import demo.turing.com.materialdesignwidget.R; import demo.turing.com.materialdesignwidget.recyclerView.adapter.SampleRecyclerAdapter;public class RecyclerViewAct extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_recycler_view);// 獲取RecyclerView對象RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view);// 創建線性布局管理器(默認是垂直方向)LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);// 為RecyclerView指定布局管理對象recyclerView.setLayoutManager(layoutManager);// 創建列表項分隔線對象RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST);// 為RecyclerView控件指定分隔線對象recyclerView.addItemDecoration(itemDecoration);SampleRecyclerAdapter sampleRecyclerAdapter = new SampleRecyclerAdapter();recyclerView.setAdapter(sampleRecyclerAdapter);}}效果圖
定制個性化分隔條
drawable\divider_custom.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><size android:height="4dp"></size><!--漸變色--><gradient android:centerColor="#ff0000ff"android:endColor="#ffff0000"android:startColor="#ffff0000"android:type="linear"></gradient></shape>主題中設置
<item name="android:listDivider">@drawable/divider_custom</item>瀑布流
StaggeredGridLayuoutAct.java
package demo.turing.com.materialdesignwidget.recyclerView;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager;import java.util.List;import demo.turing.com.materialdesignwidget.R; import demo.turing.com.materialdesignwidget.recyclerView.adapter.StaggeredGridLayoutAdapter; import demo.turing.com.materialdesignwidget.recyclerView.model.SampleModel;/*** 不采用分隔線, 在Item的布局中 采用layout_margin的方式** 主要是動態設置View的高度 adapter類中的 onBindViewHolder*/public class StaggeredGridLayuoutAct extends AppCompatActivity {private RecyclerView recyclerView ;// 模擬數據private List<SampleModel> sampleData = SimulatorData.getSampleModelData(20);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_staggered_grid_layuout);// 查找組件recyclerView = (RecyclerView) findViewById(R.id.id_rv_staggered);// 創建布局管理器 -3列,垂直StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);// 設置布局recyclerView.setLayoutManager(manager);// AdapterStaggeredGridLayoutAdapter adapter = new StaggeredGridLayoutAdapter(this,sampleData);recyclerView.setAdapter(adapter);} }activity_staggered_grid_layuout.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="demo.turing.com.materialdesignwidget.recyclerView.StaggeredGridLayuoutAct"><android.support.v7.widget.RecyclerView android:id="@+id/id_rv_staggered"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></RelativeLayout>StaggeredGridLayoutAdapter.java
package demo.turing.com.materialdesignwidget.recyclerView.adapter;import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import java.util.ArrayList; import java.util.List;import demo.turing.com.materialdesignwidget.R; import demo.turing.com.materialdesignwidget.recyclerView.model.SampleModel;/*** MyApp** @author Mr.Yang on 2016-03-31 20:19.* @version 1.0* @desc*/ public class StaggeredGridLayoutAdapter extends RecyclerView.Adapter<StaggeredGridLayoutAdapter.ViewHolder> {private Context context;private List<SampleModel> datas;private LayoutInflater inflater;// 隨機高度的結合private List<Integer> mHeights;/*** 構造函數** @param context* @param datas*/public StaggeredGridLayoutAdapter(Context context, List<SampleModel> datas) {this.context = context;this.datas = datas;this.inflater = LayoutInflater.from(context);// 初始化隨機高度的集合mHeights = new ArrayList<>();for (int i = 0; i < datas.size(); i++) {mHeights.add((int)(100 + Math.random() * 300));}}@Overridepublic StaggeredGridLayoutAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// 動態加載Item的布局文件View view = inflater.inflate(R.layout.list_basic_item, parent, false);// 實例化ViewHolderViewHolder viewHolder = new ViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(StaggeredGridLayoutAdapter.ViewHolder holder, int position) {// 獲取當前Item中的顯示的數據SampleModel sampleModel = datas.get(position);//設置控件的隨機高度ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();lp.height = mHeights.get(position);holder.itemView.setLayoutParams(lp);// 設置組件的值holder.textView.setText(sampleModel.getText());// 設置tagholder.itemView.setTag(sampleModel);}@Overridepublic int getItemCount() {return datas.size();}/*** ViewHoder*/class ViewHolder extends RecyclerView.ViewHolder {TextView textView;public ViewHolder(View itemView) {super(itemView);textView = (TextView) itemView.findViewById(R.id.textViewSample);}} }list_basic_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="3dp"android:background="#6495ED"android:gravity="center"android:orientation="horizontal"><TextView android:id="@+id/textViewSample"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp"android:text="演示"/></RelativeLayout>效果圖
動畫效果
// 默認動畫效果recyclerView.setItemAnimator(new DefaultItemAnimator());notifyItemRemoved(position)
/*** 刪除指定的Item** @param position*/public void removeData(int position) {sampleData.remove(position);// 通知RecyclerView控件某個Item已經被刪除notifyItemRemoved(position);}notifyItemInserted(positionToAdd)
/*** 在指定位置添加一個新的Item** @param positionToAdd*/public void addItem(int positionToAdd) {sampleData.add(positionToAdd, new SampleModel("新的列表項" + new Random().nextInt(10000)));// 通知RecyclerView控件插入了某個ItemnotifyItemInserted(positionToAdd);}為RecyclerView添加item的點擊事件
方法一:利用回調的方式實現(不太完善,仍可實現)
實現步驟如下:
在adapter類中,定義接口,接口中定義兩個方法分別對應click和longClick,定義完接口,添加接口和設置Adapter接口的方法:
在onBindViewHolder方法中
// 點擊事件if(mOnRecyclerViewItemClickListener != null){// clickholder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnRecyclerViewItemClickListener.onItemClick(holder.itemView,position);}});// longClickholder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {mOnRecyclerViewItemClickListener.onItemLongClick(holder.itemView,position);return false;}});}做完這些事情,我們就可以在Activity或其他地方為RecyclerView添加項目點擊事件了,
// 設置監事件sampleRecyclerAdapter.setOnRecyclerViewItemClickListener(new SampleRecyclerAdapter.OnRecyclerViewItemClickListener() {@Overridepublic void onItemClick(View view, int position) {Toast.makeText(RecyclerViewAct.this,"Click" + position ,Toast.LENGTH_SHORT).show();}@Overridepublic void onItemLongClick(View view, int position) {Toast.makeText(RecyclerViewAct.this,"LongClick" + position ,Toast.LENGTH_SHORT).show();}});完整代碼如下:
RecyclerViewAct
package demo.turing.com.materialdesignwidget.recyclerView;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Toast;import demo.turing.com.materialdesignwidget.R; import demo.turing.com.materialdesignwidget.recyclerView.adapter.SampleRecyclerAdapter;public class RecyclerViewAct extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_recycler_view);// 獲取RecyclerView對象RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view);// 創建線性布局管理器(默認是垂直方向)LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);// 為RecyclerView指定布局管理對象recyclerView.setLayoutManager(layoutManager);// 創建列表項分隔線對象RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST);// 為RecyclerView控件指定分隔線對象recyclerView.addItemDecoration(itemDecoration);// 默認動畫效果recyclerView.setItemAnimator(new DefaultItemAnimator());SampleRecyclerAdapter sampleRecyclerAdapter = new SampleRecyclerAdapter();recyclerView.setAdapter(sampleRecyclerAdapter);// 設置監事件sampleRecyclerAdapter.setOnRecyclerViewItemClickListener(new SampleRecyclerAdapter.OnRecyclerViewItemClickListener() {@Overridepublic void onItemClick(View view, int position) {Toast.makeText(RecyclerViewAct.this,"Click" + position ,Toast.LENGTH_SHORT).show();}@Overridepublic void onItemLongClick(View view, int position) {Toast.makeText(RecyclerViewAct.this,"LongClick" + position ,Toast.LENGTH_SHORT).show();}});}}SampleRecyclerAdapter
package demo.turing.com.materialdesignwidget.recyclerView.adapter;import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import java.util.ArrayList; import java.util.Random;import demo.turing.com.materialdesignwidget.R; import demo.turing.com.materialdesignwidget.recyclerView.SimulatorData; import demo.turing.com.materialdesignwidget.recyclerView.model.SampleModel;/*** MyApp** @author Mr.Yang on 2016-03-30 21:03.* @version 1.0* @desc*** RecyclerView 點擊事件 請看http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2004.html */ public class SampleRecyclerAdapter extends RecyclerView.Adapter<SampleRecyclerAdapter.ViewHolder> {// 模擬數據private ArrayList<SampleModel> sampleData = SimulatorData.getSampleModelData(20);/*** 接口 ,提供兩個方法*/public interface OnRecyclerViewItemClickListener{// 單擊事件void onItemClick(View view ,int position);// 長按觸發的事件void onItemLongClick(View view ,int position);}// 定義OnRecyclerViewItemClickListener對象public OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener ;// 暴漏給外部的set方法,持有OnRecyclerViewItemClickListener對象public void setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener listener){this.mOnRecyclerViewItemClickListener = listener ;}/*** 用于創建控件** @param parent* @param viewType* @return*/@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// 獲得列表項控件(LinearLayer對象)// list_basic_item.xml布局文件中只包含一個<LinearLayer>標簽,// 在該標簽中包含了一個<TextView>標簽, item是LinearLayout對象View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_basic_item, parent, false);ViewHolder viewHolder = new ViewHolder(item);return viewHolder;}/*** 為控件設置數據** @param holder* @param position*/@Overridepublic void onBindViewHolder(final ViewHolder holder, final int position) {// 獲取當前item中顯示的數據final SampleModel rowData = sampleData.get(position);// 設置要顯示的數據holder.textViewSample.setText(rowData.getText());// 設置tagholder.itemView.setTag(rowData);// 點擊事件if(mOnRecyclerViewItemClickListener != null){// clickholder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 通過getLayoutPosition,防止position錯位int layoutPosition = holder.getLayoutPosition();mOnRecyclerViewItemClickListener.onItemClick(holder.itemView,layoutPosition);}});// longClickholder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {int layoutPosition = holder.getLayoutPosition();mOnRecyclerViewItemClickListener.onItemLongClick(holder.itemView,layoutPosition);return false;}});}}@Overridepublic int getItemCount() {return sampleData.size();}/*** 刪除指定的Item** @param position*/public void removeData(int position) {sampleData.remove(position);// 通知RecyclerView控件某個Item已經被刪除notifyItemRemoved(position);}/*** 在指定位置添加一個新的Item** @param positionToAdd*/public void addItem(int positionToAdd) {sampleData.add(positionToAdd, new SampleModel("新的列表項" + new Random().nextInt(10000)));// 通知RecyclerView控件插入了某個ItemnotifyItemInserted(positionToAdd);}/*** 對應Item中的控件*/public static class ViewHolder extends RecyclerView.ViewHolder {private final TextView textViewSample;public ViewHolder(View itemView) {super(itemView);textViewSample = (TextView) itemView.findViewById(R.id.textViewSample);}}}方法二:使用觀察者模式實現
原理:
為RecyclerView的每個子item設置setOnClickListener,然后在onClick中再調用一次對外封裝的接口,將這個事件傳遞給外面的調用者。而“為RecyclerView的每個子item設置setOnClickListener”在Adapter中設置。其實直接在onClick中也能完全處理item的點擊事件,但是這樣會破壞代碼的邏輯。
步驟
在自定義的adapter(記得implements View.OnClickListener,下面有個onClick方法)中定義如下接口,模擬ListView的OnItemClickListener:
聲明一個這個接口的變量:
private OnRecyclerViewItemClickListener mOnItemClickListener = null;在onCreateViewHolder()中為每個item添加點擊事件:
@Overridepublic ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);ViewHolder vh = new ViewHolder(view);//將創建的View注冊點擊事件view.setOnClickListener(this);return vh;}將點擊事件轉移給外面的調用者:
@Overridepublic void onClick(View v) {if (mOnItemClickListener != null) {//注意這里使用getTag方法獲取數據mOnItemClickListener.onItemClick(v,(String)v.getTag());}}意上面調用接口的onItemClick()中的v.getTag()方法,這需要在onBindViewHolder()方法中設置和item相關的數據
@Overridepublic void onBindViewHolder(ViewHolder viewHolder, int position) {viewHolder.mTextView.setText(datas[position]);//將數據保存在itemView的Tag中,以便點擊時進行獲取viewHolder.itemView.setTag(datas[position]);}最后暴露給外面的調用者,定義一個設置Listener的方法():
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {this.mOnItemClickListener = listener;}以上所有步驟都發生在自定義的adapter中,典型的觀察者模式,有點繞的地方在于,這里涉及到兩個觀察者模式的使用,view的setOnClickListener本來就是觀察者模式,我們將這個觀察者模式的事件監聽傳遞給了我們自己的觀察者模式。
在Activity中使用
mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);//創建默認的線性LayoutManagermLayoutManager = new LinearLayoutManager(this);mRecyclerView.setLayoutManager(mLayoutManager);//如果可以確定每個item的高度是固定的,設置這個選項可以提高性能mRecyclerView.setHasFixedSize(true);//創建并設置AdaptermAdapter = new MyAdapter(data);mRecyclerView.setAdapter(mAdapter);mAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener(){@Override public void onItemClick(View view , String data){Toast.makeText(MainActivity.this, data, 600).show();}});~
RecyclerView添加Header
。。。。。。
總結
以上是生活随笔為你收集整理的RecyclerView的那点事儿的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: An error has occurre
- 下一篇: CardView的那点事儿