Когда выбрано, опция контекстного меню вызывает AlertDialog.Я хочу, чтобы пользователь вводил текст в EditText в AlertDialog, и когда пользователь нажимает PositiveButton, значение 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, CheckBoxes и т. Д. Я хочу установить один из этих EditTexts (ydsFromAlertDialog) вприсваивать значение, введенное в AlertDialog (EditText неустойка).XML-макет AlertDialog (textdialog.xml) очень прост с одним TextView и одним EditText.
При запуске программы появляются следующие строки с сообщением «Приложение неожиданно остановилось».
penYdsStr = penaltyYds.getText().toString();
Итак, в итоге, я хочу нажать пункт меню «Штраф», иметь AlertDialog с EditText, где я вводю число, и когда я нажимаю PositiveButton, значение EditText ydsFromAlertDialog изменяется на то, что было введено в диалоге.
На самом деле у меня есть таблица базы данных с 5 столбцами, 4 из которых будут заполнены обычными полями, а 5-й будет заполнен значением, введенным в диалоге.Я подумал, что если я смогу «вернуть» его «с» остальными значениями, я смогу сохранить его в той же записи таблицы, что и остальные.
Дайте мне знать, если вам нужнобольше информацииСпасибо!