2009-12-29 11 views
11

अधिकांश नमूने जो मैं देखता हूं, बटन.सेटऑनक्लिक लिस्टनर() जैसी कॉल में अज्ञात विधि का उपयोग करने के लिए दिखाई देता है। इसके बजाए, मैं उस गतिविधि वर्ग पर परिभाषित एक विधि में गुजरना चाहता हूं जिसमें मैं काम कर रहा हूं। सी # में निम्नलिखित ईवेंट हैंडलर वायरिंग के जावा/एंड्रॉइड समकक्ष क्या है?एंड्रॉइड - बटन.सेटऑनक्लिक लिस्टनर में नामित विधि कैसे सेट करें()

Button myButton = new Button(); 
myButton.Click += this.OnMyButtonClick; 

कहाँ:

private void OnMyButtonClick(object sender, EventArgs ea) 
{ 
} 

अनिवार्य रूप से, मैं कई बटन के क्लिक करें घटना को संभालने के लिए एक गैर-अनाम विधि का पुन: उपयोग करना चाहते हैं।

उत्तर

14

रोमन नूरिक का जवाब लगभग सही है। View.OnClickListener() वास्तव में एक इंटरफ़ेस है। इसलिए यदि आपकी गतिविधि ऑनक्लिक लिस्टनर लागू करती है, तो आप इसे बटन क्लिक हैंडलर के रूप में सेट कर सकते हैं।

public class Main extends Activity implements OnClickListener { 

     public void onCreate() { 
      button.setOnClickListener(this); 
      button2.setOnClickListener(this); 
     } 

     public void onClick(View v) { 
      //Handle based on which view was clicked. 
     } 
} 

वहाँ नेट में के रूप में प्रतिनिधियों नहीं हैं, इसलिए आप इंटरफेस के आधार पर समारोह का उपयोग कर अटक रहे हैं। नेट में आप प्रतिनिधियों के उपयोग के माध्यम से एक अलग कार्य निर्दिष्ट कर सकते हैं।

+0

मुझे एहसास नहीं हुआ कि जावा के पास प्रतिनिधि प्रतिनिधि नहीं था - इसे साफ़ करने के लिए धन्यवाद! –

+1

मैं वास्तव में इस लेख में आया था (यह वास्तव में एक पुराना लेख है)। प्रतिनिधियों का उपयोग न करने के अपने निर्णय के बारे में कुछ हद तक दिलचस्प टिप्पणियां। मुझे नहीं पता कि मैं सहमत हूं क्योंकि मुझे .NET में प्रतिनिधियों का उपयोग करना अच्छा लगा। http://java.sun.com/docs/white/delegates.html – GrkEngineer

1

विधि के हस्ताक्षर इस होने की आवश्यकता होगी ...

public void onMyButtonClick(View view){ 

} 

आप गतिशील बटन का उपयोग नहीं कर रहे हैं, तो आप डिजाइनर के लिए "onMyButtonClick" से "onClick" घटना सेट कर सकते हैं। इस तरह मैं स्क्रीन पर स्थिर बटन के लिए ऐसा करता हूं। मेरे लिए इसे सी # से जोड़ना आसान था।

+0

ध्यान दें कि यह एंड्रॉइड 1.6, आईआईआरसी के लिए नया है। – CommonsWare

8

View.setOnClickListener को तर्क वर्ग View.OnClickListener का एक उदाहरण (View वर्ग की एक आंतरिक वर्ग) में होना चाहिए .. आपके उपयोग के मामले के लिए, आप एक चर में इस आंतरिक वर्ग का एक उदाहरण रखना और फिर उस में पारित कर सकते हैं, जैसे इतना:

View.OnClickListener clickListener = new OnClickListener() { 
    public void onClick(View v) { 
     // do something here 
    } 
}; 

myButton.setOnClickListener(clickListener); 
myButton2.setOnClickListener(clickListener); 

आप एक से अधिक सबरूटीन्स/तरीकों भर में इस श्रोता की जरूरत है, तो आप इसे अपनी गतिविधि कक्षा में एक सदस्य चर के रूप में स्टोर कर सकते हैं।

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