एंड्रॉइड: लंबी क्लिक भी एक सामान्य क्लिक को ट्रिगर क्यों करती है?


126

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

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

मुझे अलग-अलग क्लिक के लिए दो अलग-अलग कार्य करने होंगे।

जवाबों:


284

से घटना श्रोता :

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

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

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


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

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

@erichamion मैंने बिना किसी भाग्य के, इसी तरह के मुद्दे के लिए आपके समाधान की कोशिश की। मैं आपके द्वारा
AJW

49

सरल शब्दों में उत्तर को बहाल करना:

दिया हुआ:

@Override
public boolean onLongClick(View view) {

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

इसलिए यदि आप किसी के onClickबाद भी ट्रिगर नहीं होना चाहते हैं onLongClick, तो आपको इवेंट return trueसे onLongClickहटना चाहिए ।


2
सुपर सही जवाब अगर हम सही मूल्य रखते हैं तो यह केवल लंबे समय तक क्लिक करता है यदि हम गलत डालते हैं तो दोनों क्लिक और लंबी प्रेस घटना एक साथ होती है
पीर फहीम शाह

बहुत बढ़िया जवाब।
सैम चेन

20

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


मैंने अपने onLongClick विधि में सही जोड़ा है, लेकिन अभी भी इसमें एक मुद्दा है कि मेरी onClick विधि उसके बाद आग नहीं लगाती है। मैं कैसे हल करने के बारे में किसी भी विचार या विचारों की सराहना करूंगा, यहां स्थित है: stackoverflow.com/questions/47783631/…
AJW

0

आप setOnLongClickListenerएक उदाहरण बना सकते हैं new View.OnClickListener()या new View.OnLongClickListener(), यदि आप एक लॉन्ग क्लिक बनाते हैं और एक सामान्य ओनलीक्लिस्टेनर को लागू करते हैं, तो आपको विधि को सक्रिय करने वाले सिंगल क्लिक की यह त्रुटियां मिलेंगी। आपको new View.OnLongClickListener()केवल लंबे क्लिक पकड़ने के लिए उपयोग करना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.