2011-11-29 83 views
4

我的代碼是在這裏:如何從內部類返回值?

public static boolean showConfirmationDialog(Context context, String title, String dialogContent) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setIcon(android.R.drawable.ic_dialog_alert); 
     builder.setTitle(title); 
     builder.setMessage(dialogContent); 
     builder.setPositiveButton("Confirm", new OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // what to do ? 
      } 
     }); 

現在,我想在我點擊了「確認」按鈕,返回true。那麼如何從內部類返回「true」 - 方法的OnClickListener。

需要一些幫助,謝謝。

+0

你是什麼意思「你想從一個類返回真」?類不返回值,只有方法。你的方法有一個'void'返回類型,這意味着它不返回任何東西。 –

+0

你的問題表明你沒有完全理解聽衆是如何工作的。你能否解釋一下你試圖完成什麼?在各行之間進行閱讀,看起來您可能感興趣的是「模式對話」方式,這在Android中不可行。但[此問題](http://stackoverflow.com/questions/6120567/android-how-to-get-a-modal-dialog-or-similar-modal-behavior)和/或[這個其他問題](http ://stackoverflow.com/questions/2028697/dialogs-alertdialogs-how-to-block-execution-while-dialog-is-up-net-style)可能對你有用。 –

+0

其實,這個問題:[如何在Android中顯示是/否對話框?](http://stackoverflow.com/questions/2478517/how-to-display-a-yes-no-dialog-box-in -roid)看起來最像你實際想要問的東西。 –

回答

8

你不能從內部類返回東西。在這種情況下,這沒有多大意義。該程序是否應該在onClick函數中等待,直到它返回一些內容?這不是真正的聽衆如何工作。你需要做的是,如果返回「真」,就把你計劃執行的代碼放到你的內部類中。

2

您可能需要在實例變量(不在方法內)上設置返回值 - 但這可能會導致併發問題,或者使用「容器」對象。傳入或使用「final」方法變量,您可以在其中設置要返回的返回值。不過,我至少在你的例子中使用了「返回」這個術語,因爲這個代碼不會立即執行,所以你真的需要在內部類中進行你感興趣的處理。

2

OnClickListeners不返回值。不知道什麼時候你需要做什麼,當點擊監聽器激發我不能給你任何細節,但

private boolean classBoolean = false; 
public static boolean showConfirmationDialog(Context context, String title, String dialogContent) { 

    //local variables must be declared final to access in an inner anonymous class 
    final boolean localBoolean = false; 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setIcon(android.R.drawable.ic_dialog_alert); 
    builder.setTitle(title); 
    builder.setMessage(dialogContent); 
    builder.setPositiveButton("Confirm", new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // what to do ? 
      //you can't change a local var since to access it it needs to be final 
      //localBoolean = true; can't do this 
      //so you can change a class var 
      classBoolean = true; 
      //or you can also call some method to do something 
      someMethod(); 
     } 
    }); 
+1

這不起作用。 'localBoolean = true'將會拋出一個異常,因爲它被聲明爲final。 –

+2

你是對的,我編輯過,不知道我在寫什麼的時候在想什麼...... – triggs