自定義監聽器
定義介面
//In this interface, you can define messages, which will be send to owner.
public interface MyCustomListener {
//In this case we have two messages,
//the first that is sent when the process is successful.
void onSuccess(List<Bitmap> bitmapList);
//And The second message, when the process will fail.
void onFailure(String error);
}
建立監聽器
在下一步中,我們需要在物件中定義一個例項變數,該變數將通過 MyCustomListener
傳送回撥。併為我們的聽眾新增 setter。
public class SampleClassB {
private MyCustomListener listener;
public void setMyCustomListener(MyCustomListener listener) {
this.listener = listener;
}
}
實現監聽器
現在,在其他類中,我們可以建立 SampleClassB
的例項。
public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
SampleClassB sampleClass = new SampleClassB();
}
}
接下來我們可以通過兩種方式將我們的聽眾設定為 sampleClass
:
通過我們類的工具 MyCustomListener
:
public class SomeActivity extends Activity implements MyCustomListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
SampleClassB sampleClass = new SampleClassB();
sampleClass.setMyCustomListener(this);
}
@Override
public void onSuccess(List<Bitmap> bitmapList) {
}
@Override
public void onFailure(String error) {
}
}
或者只是例項化一個匿名的內部類:
public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
SampleClassB sampleClass = new SampleClassB();
sampleClass.setMyCustomListener(new MyCustomListener() {
@Override
public void onSuccess(List<Bitmap> bitmapList) {
}
@Override
public void onFailure(String error) {
}
});
}
}
觸發器監聽器
public class SampleClassB {
private MyCustomListener listener;
public void setMyCustomListener(MyCustomListener listener) {
this.listener = listener;
}
public void doSomething() {
fetchImages();
}
private void fetchImages() {
AsyncImagefetch imageFetch = new AsyncImageFetch();
imageFetch.start(new Response<Bitmap>() {
@Override
public void onDone(List<Bitmap> bitmapList, Exception e) {
//do some stuff if needed
//check if listener is set or not.
if(listener == null)
return;
//Fire proper event. bitmapList or error message will be sent to
//class which set listener.
if(e == null)
listener.onSuccess(bitmapList);
else
listener.onFailure(e.getMessage());
}
});
}
}