2013-05-21 12 views
8

मेरे आवेदन के Mockup:एंड्रॉइड में बटन इश्यू पर डबल टैप कैसे हल करें?

Double Tap Mockup


समस्या:

जब पर Button1 क्लिक यह सिर्फ फोन आशय की ActivitySecond

button1.setOnClickListener(this); 

public void onClick(View v) { 
// TODO Auto-generated method stub 
    switch (v.getId()) 
    { 
      case R.id.button1: 
       Intent intent = new Intent(getApplicationContext(), ActivitySecond.class); 
       startActivity(intent); 
       break; 
      default: 
       break; 
    } 
} 

लेकिन, डबल टैप पर इसे दो बार गतिविधि सेकेंड खोलें।


इसे कैसे हल करें।

कृपया अगर कोई समाधान हो तो इसे साझा करें।

धन्यवाद।

+2

ऑनक्लिक को सिंक्रनाइज़ करें, और पहले क्लिक पर 'setEnabled (false)' द्वारा अपना बटन अक्षम करें, और 'setEnabled (true)' पर रीज़्यूम –

+0

उत्तर यहां पोस्ट किया गया है [बटन एंड्रॉइड पर डबल टैप को रोकें] (https: // stackoverflow .com/प्रश्न/11290610/कैसे-से-रोक-डबल-कोड-रन-बाय-क्लिक-टू-दो-फास्ट-टू-ए-बटन-इन-एंड्रॉइड/45917595 # 45917595) –

उत्तर

3

आप को singleTop

<activity android:name=".ActivitySecond" 
      android:launchMode="singleTop" 
      > 
      ... 
</activity> 
+0

धन्यवाद। मैं इसे अपने कोड से हल करता हूं। :) – Darshak

+4

आईएमओ का सबसे अच्छा समाधान नहीं है, क्योंकि इससे खराब उपयोगकर्ता अनुभव होता है। दूसरी गतिविधि अभी भी दो बार शुरू होती है (जिसे उपयोगकर्ता द्वारा तब तक देखा जाता है जब तक एनीमेशन अक्षम नहीं होता है और संसाधन खपत के मामले में उप-स्थानिक होता है)। साथ ही, इस ध्वज को नेविगेशन के साथ गड़बड़ कर सकते हैं। –

7

यह हार्डवेयर में और सॉफ्टवेयर में अपनी एक शास्त्रीय समस्या debouncing- कहा जाता है ActivitySecond की launchMode सेट कर सकते हैं। आप कुछ चाल कर सकते हैं, लेकिन वे सभी अस्थायी रूप से बटन को अक्षम करने और इसे बाद में पुनः सक्षम करने के लिए उबालते हैं। यह टाइमर के माध्यम से किया जा सकता है (उस समय प्राप्त करें जब वे उस पर क्लिक करते हैं, इसे सहेजते हैं, और यदि वे फिर से क्लिक करते हैं तो 100 एमएमएस दूसरे क्लिक को अनदेखा करते हैं)। एक और तरीका ऑनक्लिक के बाद बटन को अक्षम करना होगा और जब नई गतिविधि एक्टिविटी रिसेट के माध्यम से समाप्त होती है तो इसे फिर से सक्षम करें। या एक दर्जन अन्य तरीके हैं, आपके लिए सबसे आसान चुनें।

2
btn.setOnclickListener(new View.onClickListener(){ 

      public void onClick(View v) { 
       btn.setEnabled(false); 

      } 
    }); 

आपको ऑनलिक्लिक ईवेंट में setEnabled (false) बनाना है।

+0

मैं सक्षम/अक्षम सेट नहीं करना चाहता, मेरे लिए इसकी लंबी प्रक्रिया क्योंकि मेरे पास मेरे आवेदन में 200+ लेआउट हैं। आपका कोड भी सच है। – Darshak

+0

हां, आपकी प्रतिक्रिया के लिए धन्यवाद। – Darshak

8

Gabe Sechan दुख की बात के रूप में:

यह (, समय वे उस पर क्लिक इसे बचाने के लिए, और अगर वे इसे फिर से कहना भीतर क्लिक 100ms 2 क्लिक उपेक्षा)

टाइमर के माध्यम से किया जा सकता है

यहाँ एक कार्यान्वयन कि मैं अपने परियोजना में इस्तेमाल होता है:

public abstract class OnOneClickListener implements View.OnClickListener { 
    private static final long MIN_CLICK_INTERVAL = 1000; //in millis 
    private long lastClickTime = 0; 

    @Override 
    public final void onClick(View v) { 
     long currentTime = SystemClock.elapsedRealtime(); 
     if (currentTime - lastClickTime > MIN_CLICK_INTERVAL) { 
      lastClickTime = currentTime; 
      onOneClick(v); 
     } 
    } 

    public abstract void onOneClick(View v); 
} 

बस OnClickListener के बजाय OnOneClickListener का उपयोग करें और निष्पादित यो onOneClick() विधि में आपका कोड।

onClick() में अक्षम करने वाले बटन के साथ समाधान काम नहीं करेगा। आपके पहले onClick() बटन को निष्पादित और अक्षम करने से पहले बटन पर दो क्लिक निष्पादन के लिए निर्धारित किए जा सकते हैं।

+0

क्या आप मेरी इसी तरह की क्वेरी को हल कर सकते हैं .. मैं एक टोस्ट बढ़ाने की कोशिश कर रहा हूं जब पावर बटन दो बार दबाया जाता है –

0

जब मैं बटन में चयनकर्ता drawable का उपयोग करें और सेट

android:clickable="true" 
android:focusable="true" 
android:focusableInTouchMode="true" 

यह डबल क्लिक करें पर onClick() घटना प्रदर्शन करती है। मुझे यह पता चला कि यह एंड्रॉइड एमुलेटर एपीआई स्तर 10 पर काम कर रहा है, एंड्रॉइड 2.3.3 वास्तविक डिवाइस पर परीक्षण नहीं किया गया था। यहां पूरा कोड है।

   <Button 
       android:layout_width="50dp" 
       android:layout_height="wrap_content" 
       android:text="Discover" 
       android:id="@+id/Button1" 
       android:layout_weight=".5" 
       android:layout_margin="0dp" 
       android:background="@drawable/btn_nearby" 
       android:contentDescription="gjhfjhkjhgkvkjh" 
       android:drawableLeft="@drawable/ic_follow" 
       android:paddingLeft="20dp" 
       android:paddingRight="0dp" 
       android:drawablePadding="-10dp" 
       android:textSize="16sp" 
       android:paddingTop="2.5dp" 
       android:paddingBottom="2.5dp" 
       android:clickable="true" 
       android:focusable="true" 
       android:focusableInTouchMode="true"/> 

और जावा कोड

@Override 
    public void onClick(View view) { 
     switch(view.getId()) { 

      case R.id.Button1: 
       onButton1Click(); 
       break; 

      case R.id.Button2: 
       onButton2Click(); 
       break; 

      } 
    } 
0

मैं सिर्फ इस बात के लिए एक तिहाई समाधान प्रस्तुत करेगा। मैंने इसे एक बुलियन जोड़कर हल किया जिसका उपयोग यह जांचने के लिए किया गया था कि गतिविधि (जो बटन शुरू होता है) शुरू हो गया है या नहीं।

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