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)” .
在 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)” .