為RecyclerView的item設置點擊事件


最近做了一個這個RecyclerView的item設置點擊事件,記錄一下:

 

一、首先呢,是因為RecyclerView沒有像ListView那樣直接已經提供了OnItemClick或者OnItemLongClick等事件回調接口,所以需要自己來寫一個;

  我是隨便在activity或者fragment中看得順眼的地方聲明了一個接口,

//也可以不在這個activity或者是fragment中來聲明接口,可以在項目中單獨創建一個interface,就改成
public static interface OnItemClickListener 就OK

,如下:

 /**
     * 定義RecyclerView選項單擊事件的回調接口
     */
    public interface OnItemClickListener{//也可以不在這個activity或者是fragment中來聲明接口,可以在項目中單獨創建一個interface,就改成static就OK
        //參數(父組件,當前單擊的View,單擊的View的位置,數據)
        void onItemClick(RecyclerView parent,View view, int position, Map data);
        // void onItemLongClick(View view);類似,我這里沒用就不寫了
        //
        //這個data是List中放的數據類型,因為我這里是private List<Map> mapList;這樣一個
        //然后我的每個item是這樣的:
        //        HashMap map =new HashMap();
        //        map.put("img",R.drawable.delete);
        //        map.put("text","x1");
        //所以我的是map類型的,那如果是item中只有text的話比如List<String>,那么data就改成String類型
    }

二、有了這個接口呢,我們要去實現這個接口,那么先聲明一下,就在你的adapter里聲明,下面這樣:

     private OnItemClickListener onItemClickListener;//聲明一下這個接口
        //提供setter方法
        public void setOnItemClickListener(OnItemClickListener onItemClickListener){
            this.onItemClickListener = onItemClickListener;
        }

 

貼一下坐標:

 

三、這里為你自定義的adapter實現一下View.OnClickListener接口,首先在OnCreateViewHolder中設置一個監聽器,然后就是重寫onClick方法

view.setOnClickListener(this);//設置監聽器
    @Override
        public void onClick(View v) {
            //根據RecyclerView獲得當前View的位置
            int position = rv.getChildAdapterPosition(v);
            //程序執行到此,會去執行具體實現的onItemClick()方法
            if (onItemClickListener!=null){
                onItemClickListener.onItemClick(rv,v,position,mapList.get(position));
            }
        }

這個也貼一下坐標吧:

四、快結束了!在Activity或者Fragment中通過Adapter設置每個Item的單擊事件:

myAdapter.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(RecyclerView parent, View view, int position, Map data) {
          Toast.makeText(getContext(),"你碰到我!"+position, Toast.LENGTH_SHORT).show();//好像是可以了,我好煩啊
    }
});

這樣就可以啦,運行看看吧~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM