Pat*_*cia 2 java android callback listener
我有一个生成Bitmap的pojo方法.完成后,我想将Bitmap抛出到UI活动.这是一个示例,但它是:
private void sendBitmap(Bitmap bitmap) {
// TODO - I'm in the pojo where I want to send the bitmap
}
Run Code Online (Sandbox Code Playgroud)
仅供参考:我想要通知的UI活动不在我的项目中.我的意思是,我的项目是一个SDK,这样另一个开发人员就会在它可用时抓住这些信息.
我一直试图解决这个问题,但有些困惑.
我在MyActivity中创建了一个回调接口.到现在为止还挺好.这是它到目前为止的样子:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
演示应用程序的DoSomethingActivity可以实现我创建的回调接口.这是演示应用程序的DoSomethingActivity中回调的实现:
private final MyCallback myCallback = new MyCallback() {
@Override
public void onBitmapReady(Bitmap bitmap) {
// TODO - do something with the bitmap
}
};
Run Code Online (Sandbox Code Playgroud)
通知回调的步骤是什么?也许我几乎拥有它,但我很困惑,我在这里寻求一些帮助.
更新:
好的,我已经为我的回调"BitmapCallback"接口添加了"implements"到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.
}
Run Code Online (Sandbox Code Playgroud)
我无法从SDK活动中移动回调定义,因为我希望客户的应用程序在其代码中实现回调,以便在将位图返回到客户的应用程序时处理该位图.
这是我的Activity中的回调接口:
public interface BitmapCallback {
public void onBitmapReady(Bitmap processedBitmapy);
}
Run Code Online (Sandbox Code Playgroud)
以下是客户应用程序中的实现:
private final BitmapCallback bitmapCallback = new BitmapCallback()
{
@Override
public void onBitmapReady(Bitmap bitmap) {
// TODO Auto-generated method stub
}
};
Run Code Online (Sandbox Code Playgroud)
叫我笨,但我很难理解这一点.
你快到了.你只需要告诉你的pojo关于回调实例.首先,我强烈建议您将接口定义移动到pojo中(因为从概念上讲,它必须使用该对象而不是活动执行更多操作)或使接口成为独立类型.pojo不应该知道客户端类中定义的类型.
然后你有一个选择:
在任何一种情况下,当位图准备就绪时,您都可以通过接线将位图恢复到活动状态.
编辑
这是一个如何构建它的示例.您没有提供有关如何创建pojo或调用处理的任何信息,所以我发明了一些例子.它假定处理发生在一个单独的线程中,完成后将回调该活动.您可以根据需要进行修改.(特别是,如果pojo同步进行工作,这可能会更简单.另外,最好使用AsyncTaskLoader一个普通的而不是普通的线程,以便它与Activity生命周期正确地交互.)
BitmapCallback.java
public interface BitmapCallback {
public void onBitmapReady(Bitmap processedBitmap);
}
Run Code Online (Sandbox Code Playgroud)
MyActivity.java
public Activity 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.)
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12252 次 |
| 最近记录: |