我認爲這很容易,但它讓我難以置信。我有一個活動,顯示一個自定義對話框,允許用戶輸入一些文本,然後確定並取消按鈕定義。我使用show()顯示它。但我無法弄清楚如何從對話框中取回數值。Android - 活動如何獲得用戶從對話框中輸入的文本
我正在使用自定義對話框,因爲它對文本條目進行了一些驗證。我想我可以改變它從Activity派生,然後使用startActivityForResult顯示它,但 - 至少基於我的舊windows編程時間 - 我認爲讓用戶從Android對話框輸入值很容易。
我可以忽略某種類型的回調或偵聽機制嗎? (1)除非它的修飾符被設置爲final,然後(2)如果我說好的使它最終,不會讓我分配它因爲「最終局部變量值不能被分配,因爲它是在一個封閉的類型定義的」
String value;
final EditText input = (EditText)findViewById(R.id.theText);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
value = input.getText().toString();
dialog.dismiss();
}
});
builder.show();
[EDIT更新的溶液] =============== =============
我最終做的主要事情是增加了將Handler傳遞給對話框的能力。在對話框類我說:
private Handler clientHandler = null;
public void AddHandler(Handler client)
{
this.clientHandler = client;
}
並更新對話框的確定按鈕點擊:在活動的onCreate()顯示的對話框
/**
* The user pressed the OK button
* @param v
*/
public void okClick(View v)
{
// save the entered string
this.tag = this.tagEditText.getText().toString();
if (null != this.clientHandler)
{
// Notify the client to update itself
this.clientHandler.sendMessage(clientHandler.obtainMessage());
}
cancel();
}
然後我說:
tagDialog = new tagDialog(this);
tagHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
tag = tagDialog.tag;
}
};
tagDialog.AddHandler(tagHandler);
這些都是很好的建議,但這是一個讓我沿着正確的道路解決我的問題的建議。我想事實證明,從我們希望的對話中獲取數據並不那麼容易。我將從我的最終解決方案發布代碼。謝謝大家 – bursk 2010-12-09 23:00:19