2013-05-16 2 views
5

क्या केवल एक बटन दबाए जाने का कोई तरीका है? इस समय मेरी गतिविधि में मेरे पास दो बटन हैं जो प्रत्येक एक और गतिविधि शुरू करते हैं - फिलहाल अगर मैं उन्हें एक ही समय में दबाता हूं, तो दोनों गतिविधियां शुरू होती हैं, एक दूसरे पर। मैं इसे रोकना चाहता हूं और केवल एक या दूसरे को किसी भी समय चल रहा है। मैंने मल्टीटाउच को अक्षम करने के बारे में सोचा लेकिन मुझे लगता है कि मुझे हैकी।उपयोगकर्ताओं को एक बार में दो बटन दबाए रखने से रोकें?

संपादित करें: मैं यह करने के लिए कोशिश की है:

public class MainActivity extends Activity { 

    Button btn_send; 
    Button btn_receive; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn_send = (Button) findViewById(R.id.btn_send); 
     btn_receive = (Button) findViewById(R.id.btn_receive); 
     OnClickListener listener = new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (v.equals(btn_send)) { 
        if (isWifiConnected()) { 
         btn_receive.setClickable(false); 
         startActivity(new Intent(MainActivity.this, 
           SendActivity.class)); 
        } else { 
         Toast.makeText(MainActivity.this, 
           "Wifi connection required", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       } else if (v.equals(btn_receive)) { 
        if (isWifiConnected()) { 
         btn_send.setClickable(false); 
         startActivity(new Intent(MainActivity.this, 
           ReceiveActivity.class)); 
        } else { 
         Toast.makeText(MainActivity.this, 
           "Wifi connection required", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       } 

      } 

     }; 
     btn_send.setOnClickListener(listener); 
     btn_receive.setOnClickListener(listener); 
    } 

    @Override 
    public void onPause() { 
     btn_send.setClickable(true); 
     btn_receive.setClickable(true); 
     super.onPause(); 
    } 
} 

मैं अभी भी अपने गैलेक्सी एस 2 GT-I9100 पर एक ही समय में दोनों बटन दबा सकते हैं।

+0

एक बार बटन बटन अक्षम करते हैं या अदृश्य कर सकते हैं आप क्लिक करें – Raghunandan

+0

क्या आप 'ऑनक्लिक' के अंदर 'स्टार्ट एक्टिविटी' कहते हैं या इसे स्थगित कर दिया गया है? –

उत्तर

1

दोनों बटन के लिए एक ही onClickListener रजिस्टर और बाद के setEnabled (false) फोन जब पूर्व

+0

और उपयोगकर्ता 'गतिविधि' पर वापस आने पर 'onPause' में 'setEnabled (true)' को कॉल करें। असल में एक 'ऑनक्लिक लिस्टनर' का उपयोग करने की आवश्यकता नहीं है। –

+0

मैं सहमत हूं, लेकिन अगर इसे सख्ती से जरूरी नहीं है तो अधिक क्यों है? – Blackbelt

+0

यह एक व्यक्तिगत वरीयता है। मुझे 'ifs' या' स्विच 'पसंद नहीं है और जब ऑब्जेक्ट ओरिएंटेड कोड का उपयोग कर संभव हो तो उनसे बचें। बेशक जब यह समझ में आता है ... –

0

उपयोग एक ही क्लिक listner क्लिक किया गया है। यानी, दोनों बटनों के लिए कक्षा और बटन.सेटऑनक्लिक लिस्टनर (यह) के लिए ऑनक्लिक लिस्टनर को कार्यान्वित करें।

0
अपने सामान्य onclick-श्रोता

if(oneClick){ 
    oneClick = false; 
    //launch the activity 
} 

अंदर

, और onPause में ध्वज रीसेट करें, या जहाँ भी उपयुक्त।

public class SingleClickTouchListener implements OnTouchListener { 
    private boolean mOneViewClicked = false; 

    /** 
    * Holds the clicked view. Only allow click in other views when this view is no longer clicked. 
    */ 
    private Object mClickedView = null; 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvt) { 
     boolean consumed = false; 

     switch (motionEvt.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (!mOneViewClicked) { 
       mClickedView = view; 
       mOneViewClicked = true; 
      } else { 
       consumed = true; 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      if (mClickedView == view) { 
       mOneViewClicked = false; 
       consumed = false; 
      } else { 
       consumed = true; 
      } 
      break; 
     default: 
      // No action required. 
      break; 
     } 

     return consumed; 
    } 
} 

फिर, इस वर्ग का एक उदाहरण बनाने के लिए::

+0

मैंने यह भी कोशिश की, कोई पासा नहीं। – Logan

0

इस

button1.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       button2.setClickable(false); 

       //launch first activity 
      } 
     }); 

button2.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       button1.setClickable(false); 

       //launch second activity 
      } 
     }); 
1

सबसे पहले एक वर्ग स्पर्श घटनाओं को संभालने के लिए नीचे दिए कोशिश करें, बनाने

private SingleClickTouchListener mSingleClickTouchListener = new SingleClickTouchListener(); 

और अब एक ही उदाहरण को सभी दृश्यों (या बटन) पर पास करें जिन्हें आप एक साथ दबाए जाने की अनुमति नहीं देना चाहते हैं।

view1.setOnTouchListener(mSingleClickTouchListener); 
view2.setOnTouchListener(mSingleClickTouchListener); 
view3.setOnTouchListener(mSingleClickTouchListener); 
1

इस के लिए काम किया मुझे

boolean hasRunOnce = false; 
ImageButton clickExample1, clickExample2; 

    clickExample1 = (ImageButton) findViewById(R.id.btnExample1); 
    clickExample1.setOnClickListener(this); 

    clickExample2 = (ImageButton) findViewById(R.id.btnExample2); 
    clickExample2.setOnClickListener(this); 


} 

@Override 
public void onClick(View v) { 


    if (hasRunOnce == false) { 
     hasRunOnce = true; //Stop users clicking buttons simultaneously 

     switch (v.getId()) { 
     case R.id.btnExample1: 
      //do stuff 
      break; 
     case R.id.btnExample2: 
      //do stuff 
      break; 

     } 
    } 
} 



@Override 
protected void onResume() { 
    hasRunOnce = false; 

    super.onResume(); 
} 

}

7

एंड्रॉयड: splitMotionEvents = "false" बटन के धारक के लिए

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