2011-09-28 14 views
14

मैंने Mybutton.java जैसे कस्टम घटक बनाए हैं और मैंने Mybutton.java में एक ऑनक्लिक श्रोता सेट किया है।एंड्रॉइड- मल्टी ऑनक्लिक श्रोता एक बटन में

अब, मेरी नई गतिविधि में, मुझे एक Mybutton पर कॉल करना होगा और ऑनक्लिक श्रोता में सामग्री जोड़नी होगी।

हालांकि, अगर मैं OnClickListener mClickListener = new OnClickListener(){...... का उपयोग करता हूं तो यह पुरानी सामग्री को प्रतिस्थापित करेगा। मुझे उम्मीद है कि यह पुराने और नए श्रोता को एक साथ कर सकता है।

मैंने कुछ जानकारी की खोज की है, पता चला है कि मैं इस विधि को कार्यान्वित कर सकता हूं। कई प्रयासों के बाद, मुझे अभी भी त्रुटियां मिल रही हैं।

क्या कोई मुझे एक साधारण उदाहरण दे सकता है कि मैं इसे संशोधित करना सीख सकता हूं?

+0

मुझे यकीन है कि तुम क्यों कई श्रोता करना चाहते हैं नहीं कर रहा हूँ, आप मुझे एक उपयोग के मामले बता सकते हैं? – CommonMan

+0

MyButton.java वास्तव में क्या है? क्या यह एक ऐसी फ़ाइल है जिसमें एंड्रॉइड बटन क्लास है? –

उत्तर

32

मुझे नहीं लगता कि एंड्रॉइड एपीआई में एक एपीआई है जो एकाधिक onClick श्रोताओं को अनुमति देती है। आपको कुछ कस्टम क्लास की आवश्यकता होगी जो एक onClick() को संभालती है और इसे कॉल करने के लिए हैंडलर में पास करती है। कुछ इस तरह:

private class CompositeOnClickListener implements View.OnClickListener{ 
    List<View.OnClickListener> listeners; 

    public CompositeOnClickListener(){ 
     listeners = new ArrayList<View.OnClickListener>(); 
    } 

    public void addOnClickListener(View.OnClickListener listener){ 
     listeners.add(listener); 
    } 

    @Override 
    public void onClick(View v){ 
     for(View.OnClickListener listener : listeners){ 
      listener.onClick(v); 
     } 
    } 
} 

जब आपके अपने बटन की स्थापना, कार्य करें:

CompositeOnClickListener groupListener = new CompositeOnClickListener(); 
myButton.setOnClickListener(groupListener); 

फिर, जब भी आप एक और श्रोता जोड़ना चाहते हैं, बस

groupListener.addOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     **** Custom implementation **** 
    } 
}); 
+0

मैं अपनी कस्टम क्लास बनाने की कोशिश कर रहा था जो बटन को बढ़ाता है और View.OnClickListener लागू करता है, लेकिन दुर्भाग्य से कार्यान्वयन विधि onClick() को निकाल दिया नहीं गया था:/ – BlueMan

+0

यदि आप एक नई कक्षा को कार्यान्वित कर रहे हैं, तो आपको इसे व्यू ऑब्जेक्ट में जोड़ना होगा 'setOnClickListener'। यदि आप सीधे एक दृश्य ओवरराइड कर रहे हैं, तो आप इसे संभालने के लिए सीधे 'onClick() 'ओवरराइड कर सकते हैं। – DeeV

+0

मुझे ऑन टच लिस्टनर के लिए कुछ प्रकार की ज़रूरत थी, इससे मुझे कुछ समय बचाया! धन्यवाद @ डीवीवी – alchemist

4

फोन आप अपने कस्टम बना सकते हैं Button कक्षा इस तरह कुछ:

public class MyButton extends Button { 

    private CustomOnClickListener mCustomOnClickListener; 

    public interface CustomOnClickListener { 
     void onClick(View v); 
    } 


    public MyButton(Context context) { 
     super(context); 

     // Set your own onClickListener 
     View.OnClickListener ocl = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Do whatever you want to do 

       // Invoke the other added onclick listener 
       if(mCustomOnClickListener != null) { 
        mCustomOnClickListener.onClick(v); 
       } 
      } 
     }; 
     setOnClickListener(ocl); 
    } 

    // use this function to set the other onclick listener 
    public void setCustomOnClickListener(CustomOnClickListener cl) { 
     mCustomOnClickListener = cl; 
    } 

    } 

और, इस तरह इसका इस्तेमाल:

// create your button 
    MyButton button = new MyButton(context); 
    // add your custom onClickListener 
    button.setCustomOnClickListener(new MyButton.CustomOnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Do whatever you intend to do after the actual onClickListener 
      // from MyButton class has been invoked. 
     } 
    }); 
संबंधित मुद्दे