Android:布尔值不变?

时间:2013-07-31 18:02:39

标签: android

在我的程序中,一个布尔值(称为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后,它现在可以工作了。节拍器改变了价值!感谢所有给出建议的人!

2 个答案:

答案 0 :(得分:0)

无法弄清楚确切的问题,但反过来试试。将它们命名为method1method2,并使用 -

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)

多种可能的原因:

  • 是metronomeOn volatile?如果跨线程使用变量,则应标记它。
  • 你的跑步方法多次检查节拍器吗?从您发布的代码开始,只检查一次
  • 你按照你的想法运行方法吗?好像它确实设置了metronomeOn,你的Activity会崩溃,因为你只能从UI线程访问GUI。只是创建一个类实现Runnable不会导致线程产生。并且您可以在没有线程的情况下直接调用run方法。

从我们看到你的应用程序的小部分,我想你可能想要使用Services而不是Threads / Runnables?服务可以启动和停止,独立于Activity运行,也可以生成线程。

由于无法从服务访问活动,您可以使用Log类中的Android日志记录方法执行调试输出。