RecyclerView添加點擊事件

前言

自從recyclerView發布以來,一直獨得開發者的恩寵,因為它的優點很多,例如:高度的交互性,靈活性,可以利用它來創建多種類型的布局,而且它注重的是view的回收和利用,所以,在使用程度上遠勝listview,但是,凡事都有兩面性,例如它沒有自己的點擊的方法,今天就來學習下怎么為自己的recyclerView添加點擊事件

一: 添加引用
dependencies { ... compile 'com.android.support:recyclerview-v7:21.0.+' }
二:編寫Adapter
public PersonAdapter extends RecyclerView.Adapter<MyHolder>{ //數據源 private List<Map<String, Object>> list; //引用的布局 private LayoutInflater mInflater; //這里就是我們需要的監聽 private MyItemClickListener mItemClickListener;

//構造方法,這里要把監聽方法引入
public PersonAdapter(Context context, List<Map<String, Object>> list, MyItemClickListener listener) { this.mInflater = LayoutInflater.from(context); this.list = list; this.mItemClickListener = listener; }

//創建布局
@Overridepublic MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View convertView = mInflater.inflate(R.layout.person_item, parent, false); return new MyHolder(convertView, mItemClickListener); }

//綁定數據
@Override public void onBindViewHolder(final MyHolder holder, final int position) { //這里是數據源 }

//返回的數據長度
@Overridepublic int getItemCount() { return list.size(); } }

//定義一個監聽的接口
interface MyItemClickListener { void onItemClick(View view, int position); }

//這里就是我們的Holder并且實現OnClickListener
class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener { ImageView image; TextView title; TextView content; ImageView info; private MyItemClickListener mListener; //構造方法中需要傳入我們的監聽接口 public MyHolder(View itemView, MyItemClickListener mListener) { super(itemView); this.mListener = mListener; if (mListener != null) { itemView.setOnClickListener(this); } image = (ImageView) itemView.findViewById(R.id.iv_title_name); title = (TextView) itemView.findViewById(R.id.tv_title); content = (TextView) itemView.findViewById(R.id.tv_content); info = (ImageView) itemView.findViewById(R.id.iv_expansion); } @Override public void onClick(View v) { if (mListener != null) { mListener.onItemClick(v, getPosition()); } } }

三:添加到布局,并且在界面中調用
在界面中需要實現監聽的接口implements MyItemClickListener并實現里面的方法,監聽的事件就可以在里面操作

@Override public void onItemClick(View view, int position) { //這里是監聽操作 }

//引用RecyclerView
mRecyclerView =(RecyclerView)findViewById(R.id.my_recycler_view); //創建默認的線性LayoutManager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); //如果可以確定每個item的高度是固定的,設置這個選項可以提高性能 mRecyclerView.setHasFixedSize(true); //創建并設置Adapter mAdapter = new PersonAdapter(mContext,list,PersonFragment.this); mRecyclerView.setAdapter(mAdapter);

xml布局:
<android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/>


雖然RecyclerView沒有像listview那樣有自己的監聽方法,但我們完全可以自己去實現,網上的方法很多,希望多參考別人的方法。在RecyclerView的API中有個addOnItenTouchListener()的方法,就是通過手勢來識別點擊事件,然后通過坐標來識別點擊的Item,一樣可以做到點擊監聽。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容