2010-09-02 39 views
1

好的,這可能有點簡單,但我不知道如何做到這一點。如何更改此功能以返回String class_name?我知道我需要將void的功能更改爲String,但是我還需要做什麼?通過多種功能返回

非常感謝!

public void addClass() { 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 

    alert.setTitle("Add Class"); 

    final EditText input = new EditText(this); 
    alert.setView(input); 

    alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      String class_name = input.getText().toString(); 
     } 
    }); 

    alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
     } 
    }); 

    alert.show(); 
} 

回答

1

您試圖故意獲取的行爲(同步對話框)在android中不存在。無論您想在點擊對話框按鈕時發生什麼,都必須放置在OnClickListener.OnClick方法中。

0

假設alert.show不會返回,直到input.getText()包含輸入的數值,你可以嘗試:

public void addClass() { 
    final Vector<String> retval = new Vector<String>(); 
    retval.add(""); 

    ... 
    ... 
    alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
      String class_name = input.getText().toString(); 
      retval.set(0,class_name); 
     } 
}); 

... 
... 

    return retval.get(0); 
} 
+0

這將總是返回'「」''因爲終止addClass'之前'的onClick很長一段時間()'調用按鈕。在'addClass'終止之後,匿名類是唯一持有對Vector的引用的類,因此我們將無法訪問它的內容。 – 2010-09-02 06:03:58

+0

所以'alert.show'不是模態呢? – 2010-09-02 07:50:59

0

AlertDialog是異步的,因此通過該代碼,你想達到什麼是不可能的。 您可以將String class_name設置爲全局廣告,然後將其初始化爲

class_name = input.getText()。toString();

裏面的alert button的onClick方法。

2

返回class_name值沒有幫助。你必須實現一個取值並執行所需的操作的回調方法:

public void addClass() { 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 

    // ... 

    alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      setClassName(input.getText().toString()); 
     } 
    }); 

    // ... 
} 

protected void setClassName(String class_name) { 
    // do what ever has to be done with class_name 
}