“XYZ”回调事件如何工作?

时间:2011-11-23 04:46:05

标签: android events event-handling callback

我正在寻找概念解释或示例代码,如果可能的话

我是(android)开发的新手,从我所看到的,有大量的“onEvent()”方法。例如,View.onClickListener(),onPageDownload,onProgressUpdate ...我注意到一切都以“on”开头,我假设它暗示该方法是一个回调事件?和处理程序一样吗?​​

我很难理解事件是如何工作的,以及制作我自己的事件处理程序的最佳方法是什么。

说我想制作一个在某个事件发生时被调用的处理程序onImageDownloaded()。也许我正在下载一个图像,我想在图像下载时触发​​一个事件(是的,我知道有一个叫AsyncTask的东西,并且还从后台线程发布了一个可运行的消息,但是出于教学原因让我们假设这个过程可能也在UI线程上)。 Android如何知道调用方法onImageDownloaded()?或者更确切地说,我如何指定在下载图像时,我希望它调用我的方法onImageDownloaded()

我已经阅读了有关广播意图的内容,但这似乎更像是一个系统级别而且过度使用它。

我知道当你在视图中创建一个按钮时,你可以做到

final Button b = (Button) findViewById(R.id.mybutton);
b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d("MyActivity", "button is clicked");
    }
});

并且它几乎就像在按钮事件发生时调用特定“onClick”的按钮设置“钩子”。

在我的特定情况下,如何在动作“XYZ”?

上创建自定义回调方法

抱歉这个问题很长,感谢您耐心阅读并尝试理解

3 个答案:

答案 0 :(得分:3)

我们需要先了解什么是回调:

  

在计算机编程中,回调是对可执行代码的引用,   或者一段可执行代码,作为参数传递给其他人   码。这允许较低级别的软件层调用子例程   (或函数)在更高级别的层中定义。

Wickipedia: Callback

为了使我们的代码更易于重复使用和优化,我们需要回电。

假设:您有class从互联网下载数据。如果您想让课程更具可重用性,您将定义一个protocol(任何class构造),并告知它。稍后,符合该协议(或实现该协议)的classes可以相应地使用下载的数据。

回调通常使用interface关键字进行,但也可以使用abstract class或简单class

Here is simple illustration how to make and use our own callbacks

答案 1 :(得分:2)

一个简单的例子:

XYZer xyzer=new XYZer();
xyzer.setXYZListener(new XYZListener() {

    public void onXYZ(View v) {
        Log.d("MyActivity", "XYZ happened");
    }
});

class XYZer
{
    XYZListener listener;
    void setXYZListener(XYZListener listener){this.listener=listener;}

    void test(View v)
    {
        if(listener!=null)listener.onXYZ(v);
    }
}

HTH。对不起,我没有时间进行更长时间的解释,希望其他人能提供。

答案 2 :(得分:1)

实现回调机制的一种方法是使用接口。

以下教程包含一个很好的回调机制示例。

http://about-android.blogspot.com/2010/02/create-custom-dialog.html

查看具有单一方法的接口ReadyListener

public void ready(String name);