2011-11-28 36 views
35

Giả sử tôi muốn tạo trình xử lý sự kiện của riêng mình cho lớp học của mình, làm cách nào để thực hiện điều đó? Tôi có cần phải duy trì một sợi thủ công không?Trình xử lý sự kiện tùy chỉnh Android

+1

Xem chủ đề codepath [Tạo Listeners Custom] (https://guides.codepath.com/android/Creating-Custom-Listeners) – Suragch

Trả lời

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

Tạo một giao diện sẽ được thực hiện bởi hoạt động của bạn:

public interface OnCustomEventListener { 
    void onEvent(); 
} 

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

Bây giờ bạn cần phải biết khi nào sự kiện này thực sự xảy ra. Ví dụ: khi người dùng chạm vào một điểm trên màn hình, hãy ghi đè phương thức onTouchEvent:

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

Tương tự, bạn có thể tạo sự kiện cụ thể mà bạn muốn. (ví dụ có thể được chạm xuống, chờ đợi chính xác 2 giây và phát hành - bạn sẽ cần phải làm một số logic bên trong sự kiện cảm ứng).

Trong hoạt động của bạn, bạn có thể sử dụng đối tượng customView để thiết lập một eventListener như vậy:

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

Are ngoặc vào định nghĩa giao diện OnCustomEventListener một lỗi đánh máy? –

+1

Rất tiếc! có nó là một lỗi đánh máy, sửa chữa nó. cảm ơn – rDroid

+0

rDroid, cảm ơn ví dụ! Giao diện OnCustomEventListener có nên được khai báo bên trong hoặc bên ngoài lớp CustomView không? – Brabbeldas

5

Nó có thể được thực hiện theo cách sau

Đầu tiên tạo ra một lớp giao diện:

public interface OnStopTrackEventListener { 
    public void onStopTrack(); 
} 

Sau đó, tạo lớp kiểm soát giao diện:

public class Player { 

    private OnStopTrackEventListener mOnStopTrackEventListener; 

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

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

    } 
} 

Đó là tất cả. Hãy sử dụng nó bây giờ

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

Mã đẹp. – Dskato

Các vấn đề liên quan