मैं एंड्रॉइड में रीसाइक्लर व्यू का उपयोग शुरू कर रहा हूं। जब तक मैं अपने एडाप्टर के लिए टच श्रोता लागू नहीं करता तब तक चीजें ठीक काम करती हैं।OnLongItem RecyclerView पर क्लिक करें
इस विषय से:
https://stackoverflow.com/a/26826692/2923403
मैं सही ढंग से childview के लिए श्रोता को लागू कर सकते हैं। हालांकि, मैं OnItemClick और OnItemLongClick दोनों को कार्यान्वित करना चाहता हूं, फिर समस्या दिखाई देगी। उन्हें हमेशा एक ही समय में निकाल दिया जाता है। OnItem पहले क्लिक करें और OnItemLong बाद में क्लिक करें, जो मेरे कार्य को बेकार प्रदान करता है।
यहाँ (फौद के लिए ऊपर कोड के आधार पर, धन्यवाद) कस्टम श्रोता के लिए मेरे कोड है:
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public static interface OnItemClickListener {
public boolean onItemClick(View view, int position);
public void onItemLongClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null) {
mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView));
}
}
});
}
@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) {
}
और कार्यान्वयन के लिए:
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public boolean onItemClick(View view, int position) {
//This is fired 1st
}
@Override
public void onItemLongClick(View view, int position) {
//This comes later
}));
क्या आप उस के लिए किसी भी समाधान है ?
नमस्ते। ऐसा लगता है कि दोनों घटनाएं अभी भी मेरे मामले में एक ही समय में निकाल दी गई हैं – Souris
क्या आपने अपने रीसायकल दृश्य से टच श्रोताओं को हटा दिया (अक्षम) किया? आपको उनकी आवश्यकता नहीं है। बस अपनी गतिविधि या खंड में 'RecyclerViewAdapter.OnItemClickListener' और' RecyclerViewAdapter.OnItemLongClickListener' को लागू करें, और संबंधित इंटरफेस विधियों को ओवरराइड करें –
धन्यवाद। यह काम करता हैं। मैंने समाधान स्वीकार कर लिया। : डी – Souris