在RecyclerView設定監聽事件
阿新 • • 發佈:2019-01-22
1.為什麼在RecyclerView取消掉了Listview裡的OnItemClickListner事件,
簡單來說就是因為ListView裡的OnItemClickListner與OnClickListner
發生了衝突,OnItemClickListner無法解決多種多樣的事件,
所以在Recycerview裡面便去掉了OnitemClickListner的方法
2.如何給Recycerview新增監聽事件???
一般可以想到的方法有兩種,關鍵的關鍵就是如何去獲取position,第一種方法就是在介面卡裡面getPosition(),但是這個getPosition()已經過時了,但還有一種方法,對外實現介面,下面就是這個封裝了的工具類的程式碼:
package com.example.com.mlsdome.Activity.Util; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; /** * Created by 12697 on 2017/3/19. */ public class RecyclerItemClickListener implementsRecyclerView.OnItemTouchListener { private OnItemClickListener mListener; public interface OnItemClickListener { public void onItemClick(View view, int position); } GestureDetector mGestureDetector; public RecyclerItemClickListener(Context context, OnItemClickListener listener) { mListener= listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildPosition(childView)); return true; } return false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } }
剩下的就簡單了
md_rView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { switch (position) { case 0: Intent intent=new Intent(MatchDetailsActivity.this,WebViewActivity.class); intent.putExtra("url","http://www.myexception.cn/mobile/1952989.html"); startActivity(intent); break; } } }));