このオプションを選択すると、コンテキストメニューオプションが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)私が割り当てられるように、これらのEditTexts(ydsFromAlertDialog)のいずれかを設定するなど、あなたの通常のTextViews、EditTexts、チェックボックス、している:ここに私のクラスから関連するコードですAlertDialog(EditText penaltyYds)に入力された値。 AlertDialogのXMLレイアウト(textdialog.xml)は、1つのTextViewと1つのEditTextで非常に簡単です。
プログラムを実行すると、「アプリケーションが予期せず停止しました」という次の行のエラーが出力されます。
penYdsStr = penaltyYds.getText().toString();
だから要約すると、私は番号を入力して、私はPositiveButtonを押すと、のEditText ydsFromAlertDialogの値が入力されたものに変更されたのEditTextでAlertDialogを持って、メニューオプション「ペナルティ」を押しますダイアログで。
実際には、5つの列を持つデータベーステーブルがありますが、そのうちの4つは通常のフィールドで作成されますが、5番目の列はダイアログに入力された値によって作成されます。残りの値と一緒に "返す"ことができれば、他の値と同じテーブルレコードに保存することができます。
詳細情報が必要な場合はお知らせください。ありがとうございました!
ありがとう膨張ビューからydsAssessedLabelを取得する必要があります。それはうまくいった!このような単純な問題についての長い説明は残念です。私はAndroid開発の初心者ですから、この簡単な問題にご関心をお寄せいただきありがとうございます。 – thePITman
問題なく、助けてくれてうれしいです。私はほとんどの人が解読/漠然とした質問の難しさより多くの細部の質問を好むと思う。 –