2011-11-28 15 views
35

Sınıfım için kendi olay dinleyicimi yapmak istediğimi söyleyin, bunu nasıl yaparım? Bir iş parçacığını el ile sürdürmem gerekiyor mu?Android Özel Etkinlik Dinleyicisi

+1

kullanmak (https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

cevap

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

etkinlik tarafından uygulanacak bir arabirim oluşturun:

public interface OnCustomEventListener { 
    void onEvent(); 
} 

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

Şimdi olay aslında oluştuğu zaman bilmemiz gerekir. kullanıcı ekranda bir noktaya temas Örneğin, onTouchEvent yöntemi geçersiz:

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

Benzer şekilde, istediğiniz belirli bir etkinlik oluşturabilirsiniz. (Örnekler aşağıya doğru olabilir, tam olarak 2 saniye bekleyiniz ve serbest bırakma - dokunma olayı içinde bir mantık yapmanız gerekir). etkinlik olarak

, aşağıdaki gibi bir EventListener ayarlamak için customView nesnesini kullanabilirsiniz:

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

OnCustomEventListener arayüz tanımı parantezler bir yazım hatası mı [Custom Dinleyiciler Oluşturma] codepath konusuna bakın bakalım? –

+1

Oops! evet bir yazım hatası, düzeltildi. teşekkürler – rDroid

+0

rDroid, örnek için teşekkürler! OnCustomEventListener arabirimi, CustomView sınıfının içinde veya dışında bildirilsin mi? – Brabbeldas

5

O

İlk bir arayüz sınıfı oluşturmak şu şekilde yapılabilir:

public interface OnStopTrackEventListener { 
    public void onStopTrack(); 
} 

Ardından, arabirimi denetleyen sınıfı oluşturun:

public class Player { 

    private OnStopTrackEventListener mOnStopTrackEventListener; 

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

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

    } 
} 

Hepsi bu kadar. Şimdi

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

Güzel kod. – Dskato