在我的程序中,一个布尔值(称为metronomeOn)应该在单击一个按钮时设置为true,而在单击另一个按钮时则设置为false。我唯一的类(MainActivity)实现了Runnable。因此,在线程启动之后,在run方法中,根据metronomeOn的值,它应该执行一段代码。我的问题是,在按钮的onClick方法中,应该将metronomeOn设置为true,metronomeOn的值不会改变。
ButtonListeners(该方法在onCreate中调用):
public void ButtonListeners() {
bStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
metronomeOn = true;
}
});
bStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentBeatIndex = 1;
tvCurrentBeatIndex.setText("");
metronomeOn = false;
}
});
}
运行方法:
if (metronomeOn) {
tvBpm.setText("IN IF STATEMENT");
//other code...
}
我完全不知道为什么metronomeOn没有切换值。我知道run方法被执行了,metronomeOn只在onCreate和onDestroy中被改变了。任何想法为什么这不起作用?在此先感谢!!
编辑*的 * ** * ** * ** * ** * ** * ** * ** * ** * ** 我已经摆脱了run方法和Runnable类的实现,因此没有问题,但metronomeOn仍然总是返回false。
再次编辑* * ** * ** * ** * ** < EM> * ** * ** * ** * * 我不知道为什么或如何,但在删除Runnable并重新启动Eclipse后,它现在可以工作了。节拍器改变了价值!感谢所有给出建议的人!
答案 0 :(得分:0)
无法弄清楚确切的问题,但反过来试试。将它们命名为method1
和method2
,并使用 -
public void method1(View v) {
\\code for button1
}
public void method2(View v) {
\\code for button2
}
在xml中使用各个按钮:
android:onClick="method1"
android:onClick="method2"
答案 1 :(得分:0)
多种可能的原因:
volatile
?如果跨线程使用变量,则应标记它。Runnable
不会导致线程产生。并且您可以在没有线程的情况下直接调用run方法。从我们看到你的应用程序的小部分,我想你可能想要使用Services而不是Threads / Runnables?服务可以启动和停止,独立于Activity运行,也可以生成线程。
由于无法从服务访问活动,您可以使用Log
类中的Android日志记录方法执行调试输出。