我正在寻找概念解释或示例代码,如果可能的话
我是(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”?
上创建自定义回调方法抱歉这个问题很长,感谢您耐心阅读并尝试理解
答案 0 :(得分:3)
我们需要先了解什么是回调:
在计算机编程中,回调是对可执行代码的引用, 或者一段可执行代码,作为参数传递给其他人 码。这允许较低级别的软件层调用子例程 (或函数)在更高级别的层中定义。
为了使我们的代码更易于重复使用和优化,我们需要回电。
假设:您有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);