繁体   English   中英

RecyclerView中如何获取touched Item行的position

[英]How to get the position of touched Item row in RecyclerView

我想获得我点击的项目的 position。

请给我同样的建议。

我已经像这样实现了ontouchItemListener

请参考下面的代码。

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
});

创建实现RecyclerView.OnItemTouchListener的RecyclerItemClickListener

public class RecyclerItemClickListener implements RecyclerView.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.getChildAdapterPosition(childView));
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}

活跃地使用它

recyclerView.addOnItemTouchListener(
            new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override public void onItemClick(View view, int position) {


                }
            })
    );

kotlin @gokul-gowda 的回答形式是:

class RecyclerItemTouchListener(
context: Context,
val listener: (view: View, position: Int) -> Unit
) : RecyclerView.OnItemTouchListener {

var mGestureDetector: GestureDetector = GestureDetector(context, object :
    GestureDetector.SimpleOnGestureListener() {

    override fun onSingleTapUp(e: MotionEvent?): Boolean {
        return true
    }
})


override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
    val childView = rv.findChildViewUnder(e.x, e.y)
    if (childView != null && mGestureDetector.onTouchEvent(e)) {
        listener.invoke(childView, rv.getChildAdapterPosition(childView));
    }
    return false
}

override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {
    //TODO("Not yet implemented")
}

override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
    //TODO("Not yet implemented")
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM