android - 如何在我自己的代码中使用回调

标签 android

在这里我更新我的世界以包括 Canvas 大小

world.getViewPort().updateViewPortSize(width,height);

有更好的方法吗?有没有一种方法可以自动更新我的世界对象,而无需在 setSurfaceSize 方法中手动调用它,而是从我的世界类中调用它?

我猜我可以使用某种回调,但我不理解它们!

/* Callback invoked when the surface dimensions change. */
public void setSurfaceSize(int width, int height) {
    // synchronized to make sure these all change atomically
    synchronized (mSurfaceHolder) {
        mCanvasWidth = width;
        mCanvasHeight = height;
        world.getViewPort().updateViewPortSize(width,height);
    }
}

最佳答案

回调函数在 Java 中非常简单。实现它的方法是简单地定义一些具有单个方法 m() 的接口(interface) A,然后将类型 A 的集合添加到您的 World 类。然后,在您的 World 对象中的某个时刻,您想遍历 A 集合并在每个元素上调用方法 m()。要向您的世界添加“回调函数”,您只需定义一些实现您的接口(interface) A 的类,并将其放入您的世界类中的 A 对象集合中。例如,

public interface CallbackFunction
{
    public void execute(int a, int b);
}

public class World
{
    List<CallbackFunction> callbackFunctions;

    public void addCallback(CallbackFunction f)
    {
        callbackFunctions.add(f);
    }

    private void updateWorld()
    {
        // This loop could be anywhere in your World class
        for(CallbackFunction f : callbackFunctions)
        {
            f.execute(<some int>, <some int>);
        }
    }
}

然后向您的世界添加一个功能:

world.addCallback(new CallbackFunction()
{
    public void execute(int a, int b)
    {
       // Do some stuff
    }
}

我将剩下的留给您,但这应该让您很好地了解回调通常是如何在 Java 中实现的。

您也不需要存储回调函数的一般集合,您可以在 World 类中使用特定的回调函数和特定的方法。例如,您的 World 类可能有一些方法可以通过比较集合中的两个元素来对事物进行排序。要确定一个对象应该在另一个对象之前还是之后,您可以定义一个 CallbackFunction 接口(interface),该接口(interface)具有一个方法,该方法接受 2 个事物(如 int 的)并返回一个值,该值指示哪个事物应该先去。例如,

public interface CallbackForSorting
{
    public int compare(int a, int b);
}


public class World
{
    List<Integer> thingsToSort;

    public void sortThings(CallbackForSorter sorter)
    {
        int result = sorter.compare(thingsToSort.get(i), thingsToSort.get(i+1));

        if(result == 0)  // elements are equal
        if(result == -1) // thingsToSort.get(i) is "less than" thingsToSort.get(i+1)
        if(result == 1)  // thingsToSort.get(i) is "greater than" thingsToSort.get(i+1)
    }
}

关于android - 如何在我自己的代码中使用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331992/

相关文章:

android - 如何在同一个应用程序中添加多个小部件?

java - 如何获取/DCIM/Camera上的图像文件数组?

android - 将动态 TextView 添加到 RecyclerView ViewHolder 会弄乱 View

java - UDP 发送总是以捕获结束

android - 共享首选项无法正确评估?

android - 为什么当方向为纵向时,android 的 uiautomator 无法在 ListView 中找到元素?

android - 如何使按钮上的点击操作可见?

android - 如何使用 AddFooterView 使用字符串中的文本添加页脚?

android - Android "OS"如何检测来电

java - Android 构建错误 "Can' t 读取收缩的 Android.jar”