2011-08-04 17 views
4

このオプションを選択すると、コンテキストメニューオプションが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番目の列はダイアログに入力された値によって作成されます。残りの値と一緒に "返す"ことができれば、他の値と同じテーブルレコードに保存することができます。

詳細情報が必要な場合はお知らせください。ありがとうございました!

答えて

4

あなたは

EditText penaltyYds=(EditText)textEntryView.findViewById(R.id.ydsAssessedLabel); 
+0

ありがとう膨張ビューからydsAssessedLabelを取得する必要があります。それはうまくいった!このような単純な問題についての長い説明は残念です。私はAndroid開発の初心者ですから、この簡単な問題にご関心をお寄せいただきありがとうございます。 – thePITman

+0

問題なく、助けてくれてうれしいです。私はほとんどの人が解読/漠然とした質問の難しさより多くの細部の質問を好むと思う。 –

関連する問題