【发布时间】:2011-08-04 01:42:04
【问题描述】:
选择后,上下文菜单选项会弹出一个 AlertDialog。我希望用户在 AlertDialog 中的 EditText 中输入文本,当用户按下 PositiveButton 时,EditText 的值能够“返回”给 main 方法。这是我班上的相关代码:
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) 具有您正常的 TextView、EditText、CheckBox 等。我想将其中一个 EditText (ydsFromAlertDialog) 设置为分配在 AlertDialog (EditText 惩罚Yds) 中输入的值。 AlertDialog 的 XML 布局(textdialog.xml)非常简单,只有一个 TextView 和一个 EditText。
当我运行程序时,以下行错误显示“应用程序已意外停止。”
penYdsStr = penaltyYds.getText().toString();
总之,我想按下菜单选项“Penalty”,有一个带有 EditText 的 AlertDialog,我在其中输入一个数字,当我按下 PositiveButton 时,EditText ydsFromAlertDialog 的值将更改为在对话框中输入的值。
实际上,我有一个包含 5 列的数据库表,其中 4 列将由普通字段填充,但第 5 列将由对话框中输入的值填充。我想如果我可以将它“返回”到“与”其余值一起使用,我也可以将它保存到与其他值相同的表记录中。
如果您需要更多信息,请告诉我。谢谢!
【问题讨论】:
标签: android android-edittext android-alertdialog