बेसिक एंड्रॉइड: एंड्रॉइड में एक बटन पर दबाए गए कार्रवाई को कैसे संभाला जाए

मैंने isEnabled() का उपयोग कर एक वर्किंग कोड लिखा है।

    if(btn.isEnabled()){    
        btn.setOnClickListener(new View.OnClickListener() {    

        @Override  
        public void onClick(View v) {   
   //say send a udp packet  
        }  
        }  

    );  
    }  

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

संपादित करें: btn.isPressed() - यह भी काम नहीं करता है ... बटन पर क्लिक करने के तुरंत बाद udp पैकेट भेजा जाता है ... मैं इसे केवल तब भेजना चाहता हूं जब मैं इसे दबा रहा हूं ...

किसी भी सहायता की सराहना की जाएगी। धन्यवाद

0
क्या आपका मतलब है कि जब आप बटन क्लिक करते हैं तो आप कुछ करना चाहते हैं, और उस पर उंगली रखती है तो? कृपया स्पष्ट करें।
जोड़ा लेखक Macondo2Seattle, स्रोत
बटन पर क्लिक करने के तुरंत बाद udp पैकेट भेजा जाता है ... मैं इसे केवल तब भेजना चाहता हूं जब मैं इसे दबा रहा हूं ... मैं क्लिक पर कोई कार्रवाई नहीं चाहता ... केवल तभी जब वह उस पर उंगली रखता है। .. पीएल मदद
जोड़ा लेखक Zac Efron, स्रोत

3 उत्तर

आपकी हालत अस्पष्ट है। "केवल जब मैं इसे दबा रहा हूं" का अर्थ यह होगा कि बटन दबाए जाने पर आप भेजना शुरू कर देंगे, जिसका अर्थ MotionEvent.ACTION_DOWN पर होगा। यदि आप कार्रवाई निष्पादित होने से पहले कुछ देरी चाहते हैं, तो एक टाइमर थ्रेड बनाएं जो तब शुरू होगा जब MotionEvent.ACTION_DOWN पता चला है, और कुछ सेकंड के बाद आपकी कार्रवाई निष्पादित करेगा। टाइमर को रीसेट करना चाहिए जब MotionEvent.ACTION_UP पता चला है, या यदि कार्रवाई पहले से प्रगति पर है, तो कार्रवाई को बाधित करें।

लेकिन ईमानदारी से, आप अपनी हालत को फिर से बदलना चाह सकते हैं।

1
जोड़ा
यह आपकी बताई गई समस्या के सही समाधान की तरह प्रतीत होता है ... क्या आप वाकई इसे अन्य उदाहरण दिखाए जाने के तरीके को कार्यान्वित कर रहे हैं?
जोड़ा लेखक Genia S., स्रोत
या, क्या आप OnLongClickListener की तलाश में हैं?
जोड़ा लेखक josephus, स्रोत
जैसा कि मैंने अपने उत्तर में उल्लेख किया है, "या यदि कार्रवाई पहले ही प्रगति पर है, तो कार्रवाई को बाधित करें"। भी, आप कैसे जानते होंगे कि यह टाइमर के बिना "क्लिक" नहीं है?
जोड़ा लेखक josephus, स्रोत
आप इस उदाहरण का पालन कैसे कर सकते हैं कि उलटी गिनती टाइमर कैसे बनाएं dewful.com/?p=3
जोड़ा लेखक josephus, स्रोत
टाइमर के बजाय, मैं यूडीपी कनेक्शन को समाप्त कर सकता हूं ... लेकिन यह अक्षम लगता है? ... मुझे लगता है कि यह पूरी तरह से "phrased" है।
जोड़ा लेखक Zac Efron, स्रोत
मैं टच लिस्टनर और मोशनवेन्ट.एक्शन_DOWN का उपयोग कर रहा हूं। मुझे OnLongClickListener क्यों चाहिए?
जोड़ा लेखक Zac Efron, स्रोत
मैंने प्रश्न को फिर से पढ़ा और शायद यह स्पष्ट करने के लिए- "बटन दबाए जाने पर पैकेट (सोचने वाली आवाज़) भेजना संभव है और फिर बटन को फिर से चालू करने पर कनेक्शन को समाप्त कर दें?"
जोड़ा लेखक Zac Efron, स्रोत
सही ... नमूना कोड?
जोड़ा लेखक Zac Efron, स्रोत

आप ऑनक्लिक और सामान के बजाय ऑन टचलिस्टर का उपयोग करना चाहते हैं। जब आप उपयोगकर्ता को जाने देते हैं तो छोटे बदलाव भी ट्रैक करना चाहते हैं।

EDIT adding timer stuff

Timer timer;
UDP request;
btn.setOnTouchListener(new OnTouchListener(){

     public boolean onTouch(View v, MotionEvent event){
         if(event.getAction() == MotionEvent.ACTION_DOWN){
             //TODO start sending udp in background
             timer = new Timer();
             timer.schedule(new TimerTask(){
                public void run(){
                    request.start();
                }
             },DELAY_MS);

         }
         if(event.getAction() == MotionEvent.ACTION_UP){
             //TODO stop sending udp
             timer.cancel()

             if(request.isTransmitting()){ 
                request.stop();
             }
         }
         //needed to get both calls
         return true;
     }
});
0
जोड़ा
उपर्युक्त का उपयोग करके कार्रवाई में एक टाइमर को परिभाषित करें और इसे क्रियान्वित करने पर रद्द करें। आप भी अनुरोध करने के लिए रद्द करने का कुछ रूप जोड़ना चाहते हैं न केवल टाइमर। तो आप वर्ग चर के रूप में अनुरोध और टाइमर चाहते हैं।
जोड़ा लेखक caguilar187, स्रोत
नहीं, एक ही परिणाम फिर से!
जोड़ा लेखक Zac Efron, स्रोत

सुनिश्चित नहीं है कि यह काम करेगा, लेकिन एक कोशिश के लायक है

@Override
        public void onClick(View v) {
           //TODO Auto-generated method stub
            if(v.isPressed()){
            //do sth.   
            }
            else{
            //do sth. else  
            }

        }
0
जोड़ा
नहीं, यह काम नहीं किया ... क्या यह सेटऑनक्लिक लिस्टनर के अंदर होना चाहिए? अगर (btnTalk.isEnabled ()) {btnTalk.setOnClickListener (नया व्यू.ऑनक्लिक लिस्टनर() {@ ओवरराइड सार्वजनिक शून्य पर क्लिक करें (देखें v) {if (v.isPressed ()) {???!
जोड़ा लेखक Zac Efron, स्रोत
btn.isPressed() - यह भी काम नहीं करता है ... बटन पर क्लिक करने के तुरंत बाद udp पैकेट भेजा जाता है ... मैं इसे केवल तब भेजना चाहता हूं जब मैं इसे दबा रहा हूं ...
जोड़ा लेखक Zac Efron, स्रोत