0

メニューオプションから開くアラートダイアログボックスに連絡先フォームを作成しようとしています。フォームに 3 つの EditText フィールドがあり、Main.java には、フォームの [送信] ボタンが押されたときにこれらのフィールドから読み取ってから、電子メール インテントを開始するか、少なくともそれが想定されていることです。現在、送信ボタンを押すとすぐにアプリがクラッシュします。今、問題のトラブルシューティングを行いましたが、意図していないように見えますが、EditText フィールドから読み取ると発生します。EditText の読み取り部分を取り出して、その場所にフィラー情報を配置すると、コードは正常に機能しますが、EditText を操作するにはこれが必要です。ありがとうございました。メニューのオプションのコード全体:

case R.id.menu_feedback:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.menu_feedback);
LayoutInflater inflater = this.getLayoutInflater();

// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.feedback, null));
// Add the buttons
builder.setNegativeButton(R.string.send, new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
           // User clicked OK button
           final EditText nameField = (EditText) findViewById(R.id.EditTextName);
           String name = nameField.getText().toString();
           final EditText emailField = (EditText) findViewById(R.id.EditTextEmail);
           String email = emailField.getText().toString();
           final EditText feedbackField = (EditText) findViewById(R.id.EditTextFeedbackBody);
           String feedback = feedbackField.getText().toString();
           final CheckBox responseCheckbox = (CheckBox) findViewById(R.id.CheckBoxResponse);
           boolean bRequiresResponse = responseCheckbox.isChecked();

           /* Create the Intent */
           final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

           /* Fill it with Data */
           emailIntent.setType("plain/text");
           emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, R.string.send_email);
           emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
           emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, feedback);

           /* Send it off to the Activity-Chooser */
           startActivity(Intent.createChooser(emailIntent, "Send mail..."));
           dialog.dismiss();

       }
   });
builder.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               dialog.dismiss();
           }
       });

// create alert dialog
AlertDialog alertDialog = builder.create();

// show it
alertDialog.show();

return true;
4

2 に答える 2

2

わかりました、すべての EditTexts がfeedback layoutAlertDialog のファイルに書き込まれていると仮定します。

View dialogView = inflater.inflate(R.layout.feedback, null);
builder.setView(dialogView );

そして Edittext は、

// User clicked OK button
final EditText nameField = (EditText) dialogView.findViewById(R.id.EditTextName);
String name = nameField.getText().toString();
final EditText emailField = (EditText) dialogView.findViewById(R.id.EditTextEmail);
String email = emailField.getText().toString();
final EditText feedbackField = (EditText) dialogView.findViewById(R.id.EditTextFeedbackBody);
String feedback = feedbackField.getText().toString();

実際には、任意のビューを膨張させ、そのビューの子ビューを使用する必要がある場合は、そのビューとfindViewById()メソッドの参照を使用する必要があります。だからあなたの場合、dialogView.findViewById();

于 2013-01-28T06:15:59.763 に答える
1

AlertDialog から EditText またはその他のビューにアクセスするためにbuilder、またはインスタンスを次のように使用します。inflater

 builder.setNegativeButton(R.string.send, new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dialog, int id) {
                           // User clicked OK button
   final EditText nameField = (EditText)inflater. findViewById(R.id.EditTextName);
   String name = nameField.getText().toString();
   final EditText emailField = (EditText)inflater. 
                                                 findViewById(R.id.EditTextEmail);
   String email = emailField.getText().toString();
   final EditText feedbackField = (EditText)inflater. 
                                          findViewById(R.id.EditTextFeedbackBody);
   String feedback = feedbackField.getText().toString();
// your code here..
于 2013-01-28T06:14:44.767 に答える