web-dev-qa-db-ja.com

AlertDialogの複数のEditTextオブジェクト

私は、ユーザーが地図上にポイントを配置し、オーバーレイオブジェクトのタイトルと説明を設定できる大学のプロジェクトに取り組んでいます。問題は、2番目のEditTextボックスが最初のボックスを上書きすることです。ダイアログボックスのコードは次のとおりです。

//Make new Dialog
AlertDialog.Builder dialog = new AlertDialog.Builder(mapView.getContext());
dialog.setTitle("Set Target Title & Description");
dialog.setMessage("Title: ");

final EditText titleBox = new EditText(mapView.getContext());
dialog.setView(titleBox);

dialog.setMessage("Description: ");
final EditText descriptionBox = new EditText(mapView.getContext());
dialog.setView(descriptionBox);

助けていただければ幸いです!!ありがとう!

42
TomSelleck

ダイアログにはルートビューが1つしか含まれていないため、setView()が最初のEditTextを上書きします。ソリューションは、すべてを1つのViewGroup、たとえばLinearLayoutに入れるだけです。

_Context context = mapView.getContext();
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);

// Add a TextView here for the "Title" label, as noted in the comments
final EditText titleBox = new EditText(context);
titleBox.setHint("Title");
layout.addView(titleBox); // Notice this is an add method

// Add another TextView here for the "Description" label
final EditText descriptionBox = new EditText(context);
descriptionBox.setHint("Description");
layout.addView(descriptionBox); // Another add method

dialog.setView(layout); // Again this is a set method, not add
_

(これは基本的な例ですが、開始する必要があります。)

setメソッドとaddメソッドの命名法の違いに注意する必要があります。 setView()は1つのビューのみを保持します。setMessage()についても同様です。実際、これはすべてのsetメソッドに当てはまります。あなたが考えているのはaddコマンドです。 addメソッドは累積的で、プッシュするすべてのリストを作成しますが、setメソッドは特異で、既存のデータを置き換えます。

95
Sam

2つのEditTextを含むレイアウトを作成し、LayoutInflaterで膨らませて、AlertDialogのビューとして使用できます。

LayoutInflater factory = LayoutInflater.from(this);

//text_entry is an Layout XML file containing two text field to display in alert dialog
final View textEntryView = factory.inflate(R.layout.text_entry, null);

final EditText input1 = (EditText) textEntryView.findViewById(R.id.EditText1);
final EditText input2 = (EditText) textEntryView.findViewById(R.id.EditText2);


input1.setText("DefaultValue", TextView.BufferType.EDITABLE);
input2.setText("DefaultValue", TextView.BufferType.EDITABLE);

final AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setIcon(R.drawable.icon).setTitle("EntertheText:").setView(textEntryView).setPositiveButton("Save",
  new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog,
     int whichButton) {

    Log.i("AlertDialog","TextEntry 1 Entered "+input1.getText().toString());
    Log.i("AlertDialog","TextEntry 2 Entered "+input2.getText().toString());
    /* User clicked OK so do some stuff */
   }
  }).setNegativeButton("Cancel",
  new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog,
     int whichButton) {
     /*
     * User clicked cancel so do some stuff
     */
   }
  });
alert.show();

enter image description here

次のようにプログラムでEditTextを追加することもできます。

LinearLayout layout = new LinearLayout(mapView.getContext());
layout.setOrientation(LinearLayout.VERTICAL);

final EditText titleBox = new EditText(mapView.getContext());
titleBox.setHint("Title");
layout.addView(titleBox);

final EditText descriptionBox = new EditText(mapView.getContext());
descriptionBox.setHint("Description");
layout.addView(descriptionBox);

dialog.setView(layout);
9
K_Anas

Xamarinを使用して2つのEditTextでポップアップを作成するためのコード

    public void dial()
    {

        AlertDialog alerta = new AlertDialog.Builder(this).Create();
        LinearLayout layout = new LinearLayout(this);

                   layout.Orientation = Orientation.Vertical;


        EditText factinput = new EditText(this);
        alerta.SetMessage("Facturas Disponibles:");
        layout.AddView(factinput);

        EditText canttinput = new EditText(this);
        alerta.SetMessage("Cantidad:");
        layout.AddView(canttinput);

        alerta.SetView(layout);


        alerta.SetButton("Cancelar", (a, b) =>
        {

            AlertDialog cencelacion = new AlertDialog.Builder(this).Create();
            cencelacion.SetMessage("Desea Cancelar");
            cencelacion.SetButton("OK", (c, d) => { });
            cencelacion.Show();

        });
        alerta.SetButton2("Aceptar", (ee, f) =>
        {
            AlertDialog confirmacion = new AlertDialog.Builder(this).Create();
            confirmacion.SetMessage("Realizar Busqueda de Factura");
            confirmacion.SetButton("OK", (c, d) => { });
            confirmacion.Show();
        }
        );

        alerta.Show();

    }
0
Zuko