2011-03-25 17 views
90

मेरे पास लंबे समय तक क्लिक करने और नियमित क्लिक के लिए श्रोताओं के साथ एक सूची दृश्य है।एंड्रॉइड: लंबी क्लिक क्यों सामान्य क्लिक को ट्रिगर करता है?

क्यों, जब मैं एक सूची आइटम को लंबे समय तक दबाता हूं, तो नियमित क्लिक ईवेंट भी कहलाता है?

मुझे अलग-अलग क्लिकों के लिए दो अलग-अलग फ़ंक्शन होने की आवश्यकता है।

उत्तर

215

Event Listeners से:

onLongClick() - यह इंगित करने के लिए है कि क्या आप घटना का सेवन किया है और इसे आगे नहीं किया जाना चाहिए एक बूलियन देता है। यही है, यह इंगित करने के लिए सच है कि आपने ईवेंट को संभाला है और इसे यहां रोकना चाहिए; झूठी वापसी अगर आपने इसे संभाला नहीं है और/या घटना किसी अन्य ऑन-क्लिक श्रोताओं को जारी रखना चाहिए।

आप अपने onLongClick() से true लौट रहे हैं और अभी भी सामान्य क्लिक करें घटना हो रही है?

जोड़ने के लिए संपादित: एक सूची दृश्य के लिए, आप OnItemLongClickListener का उपयोग कर रहे हैं। onItemLongClick() यह इंगित करने के लिए एक समान बूलियन रिटर्न वैल्यू का उपयोग करता है कि यह घटना का उपभोग करता है या नहीं।

+0

'myListView.setOnItemLongClickListener (यह) सेट करने के लिए; 'विकल्प, आपको फ़ंक्शन' सार्वजनिक बूलियन onItemLongClick (...) 'को ओवरराइड करना होगा। यहां आपको बस 'सत्य वापस करने' की आवश्यकता है जो इंगित करता है कि लॉन्गक्लिक सक्रिय था और नियमित क्लिक पर ट्रिगर को रद्द कर देगा। यदि आप झूठी वापसी करते हैं तो यह नियमित क्लिक भी ट्रिगर करेगा। – Brandon

+0

दूसरी स्थिति के बारे में क्या, जब मुझे लंबे समय के बीच अंतर करने की आवश्यकता होती है और उस –

+0

@erichamion के अनुसार कार्रवाई करने के लिए सामान्य क्लिक करने के लिए मैंने किसी भी मुद्दे के लिए आपके समाधान की कोशिश की, बिना किसी किस्मत के। मैं यहां स्थित किसी भी अंतर्दृष्टि या विचारों की सराहना करता हूं, यहां स्थित है: https://stackoverflow.com/questions/47783631/recyclerview-how-to-add-onclick-and-keep-onlongclick-working – AJW

13

सुनिश्चित करें कि आप अपने onClick विधि के लिए OnClickListener ओवरराइड कर रहे हैं। यह भी सुनिश्चित करें कि आप onLongClick विधि के लिए OnLongClickListener ओवरराइड कर रहे हैं। और सुनिश्चित करें कि आपकी onLongClick विधि true लौटाती है, क्योंकि यह onClick का उपभोग करेगी।

को देखते हुए:

+0

मैंने अपने में सच जोड़ा ऑन लोंगक्लिक विधि लेकिन अभी भी एक समस्या है कि मेरे ऑनक्लिक विधि उसके बाद आग नहीं लगती है। मैं यहां स्थित हल करने के तरीके पर किसी भी विचार या विचारों की सराहना करता हूं: https: // stackoverflow।com/question/47783631/recyclerview-how-to-add-onclick-and-keep-onlongclick-working – AJW

15

सरल शब्दों में जवाब restating

@Override 
public boolean onLongClick(View view) { 

    return true; // or false 
} 
  • return true मतलब यह है कि घटना सेवन किया जाता है। यह संभाला जाता है। कोई अन्य क्लिक घटनाओं को अधिसूचित नहीं किया जाएगा।
  • return false का मतलब है कि घटना का उपभोग नहीं किया जाता है। किसी भी अन्य क्लिक घटनाओं को सूचनाएं प्राप्त करना जारी रहेगा।

तो आप नहीं चाहते, तो onClick भी एक onLongClick के बाद शुरू किया जा करने के लिए तो आप onLongClick घटना से return true चाहिए।

+1

सुपर सही उत्तर अगर हम सही मान डालते हैं तो यह केवल तभी क्लिक करता है जब हम झूठ डालते हैं तो दोनों क्लिक और लंबी प्रेस घटना होती है तुरंत –

संबंधित मुद्दे