Android Studio - 如何通知 activity 视图已更改变量?

Android Studio - How can I notify an activity that a view has changed a variable?

在 Android Studio 中,我有一个 activity 调用视图。用户单击视图,视图持续一段时间,然后完成并设置 public boolean finished = true.

这里是调用视图的 activity 及其代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myView = new GameLevelView(this);
    setContentView(myView);
}

在视图中,我有这个执行:

protected void onDraw(Canvas canvas) {

    //Update canvas elements

    if(cerainCondition == true){
        finished = true;
    }

    try {
        Thread.sleep(10);            // Delay
    } catch (InterruptedException e) { }

    invalidate();  // Force a re-draw
}

这基本上一直在循环。但是,我想让原来的 activity 知道这个视图已经设置了 finished = true,这样我就可以开始另一个 activity。我不想破坏视图,因为另一个 activity 将显示在顶部。

我该如何让 activity 知道视图已更改变量?

我考虑过 BroadcastReceiver,但我看不出真正设置广播的方法,所以我不确定这是否可行。

我相信您正在寻找的答案是here。本质上,您需要创建一个变量更改侦听器,但是该文档的作者对该主题的研究比我多得多。

编辑

解决您的问题的一种方法是创建一个包装器 class 来存储您的当前值并跟踪该值何时发生变化,如图所示 here

为了跟踪包装器的变化 class,您需要创建一个自定义视图,该视图实现其传统构造函数,并带有一个额外的自定义方法,可以检测值的变化。

然后,在您的 layout.xml 文件中,您只需添加此自定义视图,它就像一个常规视图,只是能够在您的布尔值更改时进行监听。

我建议阅读 post 因为它写得很好,我希望它能回答你的问题!

你应该检查 Observer Design Pattern,我想这就是你要找的。

编辑:

想法是实现这种模式。

为侦听器创建接口:

public interface ValueChangeListener { public void valueChanged(boolean newValue); }

在您的 Activity 中实现此接口,当值更改时将触发 valueChanged(newValue) 方法。您应该从其中启动另一个 activity(或您要响应更改的值而采取的任何操作)。

在您的自定义视图中创建一个类型为 ValueChangeListener 的变量,并且在创建视图时,只需将 Activity 作为参数传递(它实现了接口),或者创建一个方法(setValueChangeListener(ValueChangeListener listener)), 以传递侦听器并将其设置为前面提到的变量。

从您的角度来看,当您检测到值的变化时 - 只需使用变量并调用其 valueChanged(newValue) 方法……这将触发 Activity 中的“onValueChanged(newValue)” .