我有一个生成位图的 pojo 方法。完成后,我想将位图丢给 UI Activity 。这是一个示例,但在这里:
private void sendBitmap(Bitmap bitmap) {
// TODO - I'm in the pojo where I want to send the bitmap
}
仅供引用:我要通知的 UI Activity 在我的项目之外。我的意思是,我的项目是一个 SDK,这样其他开发人员就会在信息可用时立即获取它。
我一直在努力解决这个问题,但有点困惑。
- 我需要一个“回调”接口(interface)吗?
- 或者“监听器”接口(interface)?
- 或者两者兼而有之?
我在 MyActivity 中创建了一个回调接口(interface)。到目前为止,一切都很好。这是到目前为止的样子:
import android.graphics.Bitmap;
public class MyActivity {
// protected void whateverOtherMethods (Bundle savedInstanceState)
// {
// .
// .
// .
// .
// .
// .
//
// }
/**
* Callback interface used to supply a bitmap.
*/
public interface MyCallback {
public void onBitmapReady(Bitmap bitmap);
}
}
演示应用程序的 DoSomethingActivity 可以实现我创建的回调接口(interface)。这是演示应用程序的 DoSomethingActivity 中回调的实现:
private final MyCallback myCallback = new MyCallback() {
@Override
public void onBitmapReady(Bitmap bitmap) {
// TODO - do something with the bitmap
}
};
我缺少通知回调的步骤是什么?也许我几乎明白了,但我很困惑,所以我正在这里寻找一点帮助。
更新:
好的,我已将回调“BitmapCallback”接口(interface)的“实现”添加到 pojo 中。在这里:
public class ProcessImage implements BitmapCallback {
/**
* pojo method to return bitmap
*/
private void sendBitmap() {
this.onBitmapReady(bitmap);
}
@Override
public void onBitmapReady(Bitmap bitmap) {
// we still need to send the bitmap to cusomer App.
}
我无法从 SDK Activity 中移动回调定义,因为我希望客户的应用程序在其代码中实现回调,以便在将位图返回给客户的应用程序时处理位图。
这是我的 Activity 中的回调接口(interface):
public interface BitmapCallback {
public void onBitmapReady(Bitmap processedBitmapy);
}
这是客户应用程序中的实现:
private final BitmapCallback bitmapCallback = new BitmapCallback()
{
@Override
public void onBitmapReady(Bitmap bitmap) {
// TODO Auto-generated method stub
}
};
叫我傻瓜吧,但我很难理解这个问题。
最佳答案
你快到了。您只需将回调实例告诉您的 POJO
。首先,我强烈建议您将接口(interface)定义移动到 POJO
中(因为从概念上讲,与您的 Activity 相比,它必须对该对象做更多的事情)或使接口(interface)成为一个独立的类型。 POJO
不应该知道客户端类中定义的类型。
然后你有一个选择:
- 使用监听器模式:在您的
POJO
中添加一个字段来存储回调的实例(如果您想支持回调多个监听器,则添加更复杂的内容)和设置听众。当您创建或设置POJO
时,从您的 Activity (或任何合适的地方)调用该方法。 - 使用回调模式:使用回调参数增强相关的 API 方法。
无论哪种情况,当位图准备就绪时,您就可以通过连接将位图返回到 Activity 中。
编辑
这是一个可能如何构建的示例。您没有提供有关如何创建 POJO
或调用处理的任何信息,因此我发明了一些东西作为示例。它假设处理发生在一个单独的线程中,完成后将回调到 Activity 。您可以根据需要修改它。 (特别是,如果 POJO
同步执行工作,这可能会简单得多。此外,最好使用 AsyncTaskLoader
而不是普通线程,以便它与Activity
生命周期。)
BitmapCallback.java
public interface BitmapCallback {
public void onBitmapReady(Bitmap processedBitmap);
}
MyActivity.java
public class MyActivity extends Activity implements BitmapCallback {
Handler mHandler; // initialize this in onCreate
. . .
public void onRequestImage() {
ProcessImage processor = new ProcessImage();
getImage(this /* , other actual args */);
}
@Override
public void onBitmapReady(final Bitmap processedBitmap) {
// since this may be called from a non-UI thread, we can't update
// the UI directly.
mHandler.post(new Runnable() {
@Override
public void run() {
// handle the bitmap (update the UI, etc.)
}
});
}
}
ProcessImage.java
public class ProcessImage {
public void getAnImage(final BitmapCallback callback /* , other formal args */) {
new Thread() {
@Override
public void run() {
Bitmap bitmap;
. . . // do the work
// then deliver the results
callback.onBitmapReady(bitmap);
}
}.start();
}
}
关于java - Android监听器/回调如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006360/