2011-08-04 54 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)有你的正常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個將填入在對話框中輸入的值。我想如果我能夠「返回」它與剩下的值「相處」,我將能夠將它與其他值保存到相同的表格記錄中。

如果您需要更多信息,請告知我。謝謝!

回答

4

你必須從視圖中獲得ydsAssessedLabel你充氣

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

謝謝。這工作!對於這樣一個簡單問題的冗長描述,我感到抱歉。我是Android開發新手,所以我非常感謝您對這個簡單問題的關注。 – thePITman

+0

沒問題,很高興幫助。我認爲大多數人更喜歡那些難以解讀/模糊問題的問題。 –

相關問題