2013-04-06 55 views
0

我有一个游戏活动,当它结束时,它转到主菜单,现在我需要禁用启动刚刚结束的游戏的按钮。让我们打电话给我的游戏类classGame和我的菜单classMenu。我想:如何在其他活动中禁用按钮?

classMenu obj = new classMenu(); 

然后在同一个类时,适当的时候我打电话:

我classGame

obj.myButtonToBeDisabled.setEnabled(false); 

,但我得到stactOverflow上线的错误我创建在我的obj,我的菜单活动很快开始。这个怎么做?

编辑: 我也在我gameClass试过这样:

public void disableButton(){ 
     button.setEnabled(false); 
    } 

,然后调用它:

obj.disableButton 

但同样的错误。

的logcat:

04-06 16:30:48.709: I/dalvikvm(25015): threadid=1: stack overflow on call to Ljava/lang/VMThread;.currentThread:L 
04-06 16:30:48.709: I/dalvikvm(25015): method requires 0+20+0=20 bytes, fp is 0x4214d300 (0 left) 
04-06 16:30:48.709: I/dalvikvm(25015): expanding stack end (0x4214d300 to 0x4214d000) 
04-06 16:30:48.769: I/dalvikvm(25015): Shrank stack (to 0x4214d300, curFrame is 0x4214fcb0) 
04-06 16:30:48.899: D/AndroidRuntime(25015): Shutting down VM 
04-06 16:30:48.899: W/dalvikvm(25015): threadid=1: thread exiting with uncaught exception (group=0x40018560) 
04-06 16:30:49.369: D/dalvikvm(25015): GC_CONCURRENT freed 325K, 50% free 2850K/5639K, external 0K/0K, paused 5ms+24ms 
04-06 16:30:49.459: E/AndroidRuntime(25015): FATAL EXCEPTION: main 
04-06 16:30:49.459: E/AndroidRuntime(25015): java.lang.StackOverflowError 
04-06 16:30:49.459: E/AndroidRuntime(25015): at java.lang.Thread.currentThread(Thread.) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at java.lang.ThreadLocal.get(ThreadLocal.java:59) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at android.os.Looper.myLooper(Looper.) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at android.os.Handler.<init>(Handler.) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at android.app.Activity.<init>(Activity.) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:17) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Izbor.<init>(Izbor.java:19) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.androidaplikacije.toplo_hladno.Asocijacije.<init>(Asocijacije.java:32) 
04-06 16:30:49.459: E/AndroidRuntime(25015): at rs.android 
04-06 16:30:49.659: D/dalvikvm(25015): GC_CONCURRENT freed 522K, 51% free 2899K/5895K, external 0K/0K, paused 7ms+5ms 

Asocijacije是我gameClass,并Izbor在我menuClass。

+0

你可以在开始游戏前禁用*按钮*只要点击它?)。要么或者使用startActivityForResult http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content。Intent,%20int)在活动结束时获得回调? – 2013-04-06 14:10:50

+0

其实我并不是很了解你描述的错误......如果你有一个堆栈溢出,寻找循环函数调用 - 即函数A调用函数B调用函数A(A和B也可能在不同的类中) )。 – 2013-04-06 14:14:21

+0

如果你想让用户不能点击它并且它不出现,使用'button.setVisible(false);' – Justin 2013-04-06 15:32:19

回答

1

你不需要在游戏中调用任何东西。如果您的菜单是首先开始游戏的菜单,则当游戏的Activity完成时,它会收到通知。

startActivityForResult这样开始你的游戏:

Intent intent = new Intent(); 
intent.setClassName ("com.your.package.name", "com.your.package.name.YourGameActivity"); 
startActivityForResult (intent, 0); 

然后,在你的游戏类,当你的游戏结束,叫setResult (int result)你之前finish游戏Activity这样的:

setResult (123); // or something like Menu.GAME1_FINISHED 
finish(); 

返回在您的菜单活动中,您必须执行onActivityResult回拨,如下所示:

public void onActivityResult (int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult (requestCode, resultCode, intent); 

    switch (resultCode) 
    case 123: 
     // hide button 1 
    case 234: 
     // hide button 2 
    // etc... 
} 
+0

谢谢你好人!这工作。你可以看看[这个](http://stackoverflow.com/questions/15754577/how-to-disable-interaction-between-buttons-of-the-same-layout)吗? – marjanbaz 2013-04-09 13:34:21

0

你可以试试.setClickable(false)代替,并且看看这个问题,我问他们之间的区别:

setEnabled() vs setClickable(), what is the difference?

而且没有错误日志,我们帮不了你更多的则此,请张贴他们。

+0

我编辑了我的第一篇文章。看一看。 – marjanbaz 2013-04-06 14:38:00

+0

你试过.setClickable(false)吗? – 2013-04-06 14:41:11

+0

是的,同样的错误。 – marjanbaz 2013-04-06 14:43:02

0

我相信您有一种方法来调用代码,以禁用按钮,以安全的方式告诉菜单类禁用按钮可以通过LocalBroadcastManager,就像描述here问题。

基本上,您可以将您的菜单对象注册为在游戏结束时发送的特定广播消息的侦听器,该消息将执行禁用所需按钮的方法。

相关问题