選中後,上下文菜單選項會顯示AlertDialog。我希望用戶在AlertDialog的EditText中輸入文本,當用戶按下PositiveButton時,EditText的值可以「返回」到主方法中。下面是我班的相關代碼:如何從AlertDialog中的EditText檢索值?
public class PassPlay extends ListActivity {
public static final int PENALTY_ID = Menu.FIRST+1;
public static final int FUMBLE_ID = Menu.FIRST+2;
public static final int ADDLYDS_ID = Menu.FIRST+3;
public static final int SAFETY_ID = Menu.FIRST+4;
EditText ydsFromAlertDialog;
String penYdsStr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.passplay);
ydsFromAlertDialog=(EditText)findViewById(R.id.passYdsLabel);
registerForContextMenu(getListView());
}
public boolean onCreateOptionsMenu(Menu menu) {
populateMenu(menu);
return(super.onCreateOptionsMenu(menu));
}
public boolean onOptionsItemSelected(MenuItem item) {
return(applyMenuChoice(item) || super.onOptionsItemSelected(item));
}
public boolean onContextItemSelected(MenuItem item) {
return(applyMenuChoice(item) || super.onContextItemSelected(item));
}
private void populateMenu(Menu menu) {
menu.add(Menu.NONE, PENALTY_ID, Menu.NONE, "Penalty");
menu.add(Menu.NONE, FUMBLE_ID, Menu.NONE, "Fumble");
menu.add(Menu.NONE, ADDLYDS_ID, Menu.NONE, "Additional Yards");
menu.add(Menu.NONE, SAFETY_ID, Menu.NONE, "Safety");
}
private boolean applyMenuChoice(MenuItem item) {
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView;
switch (item.getItemId()) {
case PENALTY_ID:
textEntryView = factory.inflate(R.layout.textdialog, null);
new AlertDialog.Builder(this)
.setView(textEntryView)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.timeout)
.setPositiveButton(R.string.offense, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Actions for offensive timeout
EditText penaltyYds=(EditText)findViewById(R.id.ydsAssessedLabel);
penYdsStr = penaltyYds.getText().toString();
ydsFromAlertDialog.setText(penYdsStr);
}
})
.setNeutralButton(R.string.defense, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Actions for defensive timeout
}
})
.setNegativeButton(R.string.cancel, null)
.show();
return true;
case FUMBLE_ID:
//Fumble window
return true;
case ADDLYDS_ID:
//Additional Yards window
return true;
case SAFETY_ID:
//Safety window
return true;
}
return(false);
}
}
主要XML佈局(passplay.xml)有你的正常TextViews,EditTexts,複選框,等我想設置那些EditTexts(ydsFromAlertDialog)中的一個將被分配在AlertDialog中輸入的值(EditText penaltyYds)。 AlertDialog的XML佈局(textdialog.xml)非常簡單,只需一個TextView和一個EditText。
當我運行該程序時,以下行錯誤與「應用程序已意外停止」。
penYdsStr = penaltyYds.getText().toString();
因此,在總結,我想按菜單選項「處罰決定書」,有一個AlertDialog與在那裏我輸入一個號碼,當我按下PositiveButton的EditText上ydsFromAlertDialog的值更改爲輸入的內容一個EditText在對話框中。
實際上,我有一個有5列的數據庫表,其中4個將由普通字段填充,但第5個將填入在對話框中輸入的值。我想如果我能夠「返回」它與剩下的值「相處」,我將能夠將它與其他值保存到相同的表格記錄中。
如果您需要更多信息,請告知我。謝謝!
謝謝。這工作!對於這樣一個簡單問題的冗長描述,我感到抱歉。我是Android開發新手,所以我非常感謝您對這個簡單問題的關注。 – thePITman
沒問題,很高興幫助。我認爲大多數人更喜歡那些難以解讀/模糊問題的問題。 –