2013-04-06 56 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問題。

基本上,您可以將您的菜單對象註冊爲在遊戲結束時發送的特定廣播消息的偵聽器,該消息將執行禁用所需按鈕的方法。

相關問題