2011-11-28 11 views
35

कहें कि मैं अपनी कक्षा के लिए अपना खुद का कार्यक्रम श्रोता बनाना चाहता हूं, मैं यह कैसे कर सकता हूं? क्या मुझे मैन्युअल रूप से धागे को बनाए रखने की ज़रूरत है?एंड्रॉइड कस्टम इवेंट श्रोता

+1

का उपयोग CodePath विषय देखें [कस्टम श्रोता बनाना] (https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

उत्तर

92
public class CustomView extends View(){ 
OnCustomEventListener mListener; 
: 
://some code 
: 
: 

एक अंतरफलक है कि आपके गतिविधि के द्वारा लागू किया जाएगा बनाएँ:

public interface OnCustomEventListener { 
    void onEvent(); 
} 

public void setCustomEventListener(OnCustomEventListener eventListener) { 
    mListener = eventListener; 
} 

अब आप को पता है जब घटना वास्तव में हो रहा है की जरूरत है। उदाहरण है जब उपयोगकर्ता स्क्रीन पर एक बिंदु को छू लेती है, तो ओवरराइड onTouchEvent विधि:

onTouchEvent(MotionEvent ev) { 
    if (ev.getAction==MotionEvent.ACTION_DOWN) { 
     if(mListener!=null) 
      mListener.onEvent(); 
    } 
} 

इसी तरह, आप एक विशिष्ट घटना है कि आप चाहते हैं बना सकते हैं। (उदाहरण स्पर्श हो सकते हैं, बिल्कुल 2 सेकंड तक प्रतीक्षा करें और रिलीज करें- आपको टच इवेंट के अंदर कुछ तर्क करने की आवश्यकता होगी)।

अपनी गतिविधि में, आप इस तरह के रूप में एक eventListener स्थापित करने के लिए customView वस्तु का उपयोग कर सकते हैं:

customView.setCustomEventListener(new OnCustomEventListener() { 
    public void onEvent() { 
     //do whatever you want to do when the event is performed. 
    } 
}); 
+0

OnCustomEventListener इंटरफ़ेस परिभाषा पर कोष्ठकों लिखने में कोई त्रुटि हो जाए? –

+1

ओह! हाँ यह एक टाइपो है, इसे सही किया गया है। धन्यवाद – rDroid

+0

rDroid, उदाहरण के लिए धन्यवाद! क्या कस्टम क्लाइंट क्लास के अंदर या बाहर OnCustomEventListener इंटरफ़ेस घोषित किया जाना चाहिए? – Brabbeldas

5

यह निम्नलिखित तरीके

पहले एक अंतरफलक वर्ग बनाने में किया जा सकता:

public interface OnStopTrackEventListener { 
    public void onStopTrack(); 
} 

फिर इंटरफ़ेस को नियंत्रित करने वाली कक्षा बनाएं:

public class Player { 

    private OnStopTrackEventListener mOnStopTrackEventListener; 

    public void setOnStopTrackEventListener(OnStopTrackEventListener eventListener) 
    { 
     mOnStopTrackEventListener = eventListener; 
    } 

    public void stop() 
    { 
     if(mOnStopTrackEventListener != null) 
     { 
      mOnStopTrackEventListener.onStopTrack(); 
     } 

    } 
} 

यह सब कुछ है। इसे अब

Player player = new Player(); 
player.stop(); //We are stopping music 
player.setOnStopTrackEventListener(new OnStopTrackEventListener() { 
     @Override 
     public void onStopTrack() { 
      //Code to work when music stops 
     } 
}); 
+0

सुंदर कोड। – Dskato