在Android Studio中,我有一个调用视图的活动。用户单击视图,视图会持续一段时间,然后完成并设置public boolean finished = true。
以下是调用视图及其代码的活动:
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
}
这基本上保持循环。但是,我希望原始活动知道此视图已设置finished = true,以便我可以启动另一个活动。我不想销毁视图,因为其他活动将显示在顶部。
如何让活动知道视图已更改变量?
我考虑过BroadcastReceiver,但我认为无法实际设置广播,所以我不确定这是否有效。
答案 0 :(得分:2)
我相信你要找的答案是here。从本质上讲,您需要创建一个变量更改侦听器,但该主题的作者在该主题中的研究要远远超过I.
修改强>
解决问题的一种方法是创建一个包装类来存储当前值,并跟踪该值何时发生变化here。
为了跟踪包装类的更改,您需要创建一个自定义视图,该视图使用可以检测值更改的奖励自定义方法来实现其传统构造函数。
然后,在layout.xml文件中,您只需添加此自定义视图,该视图的作用类似于常规视图,但能够在布尔值更改时进行侦听。
我建议阅读这篇文章,因为它写得非常好,我希望它能回答你的问题!
答案 1 :(得分:1)
您应该查看Observer Design Pattern,我认为这就是您要找的内容。
编辑:
这个想法是为了实现这种模式。
为听众创建一个界面:
public interface ValueChangeListener {
public void valueChanged(boolean newValue);
}
在您的Activity中实现此接口,当值更改时将触发valueChanged(newValue)
方法。您应该从内部开始其他活动(或者您想要采取的任何行动以响应更改的值)。
在类型为ValueChangeListener
的自定义视图中创建变量,在创建视图时,只需将Activity作为参数传递(它实现接口),或创建方法(setValueChangeListener(ValueChangeListener listener)
),传递监听器并将其设置为前面提到的变量。
在您的视图中,当您检测到值的更改时 - 只需使用该变量并调用其valueChanged(newValue)
方法...这将触发您的Activity中的'onValueChanged(newValue)'。