49

私は、ユーザーがマップ上にポイントを配置し、オーバーレイ オブジェクトのタイトルと説明を設定できるようにする大学向けのプロジェクトに取り組んでいます。問題は、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);

どんな助けでも大歓迎です!! ありがとう!

4

4 に答える 4

108

ダイアログにはルート ビューが 1 つしか含まれていないためsetView()、最初の EditText が上書きされます。解決策は単純で、たとえば LinearLayout のように、すべてを 1 つの ViewGroup に配置します。

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

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

setaとmethodの命名法の違いに注意してくださいaddsetView()は 1 つのビューのみを保持します。同じことが に似ていsetMessage()ます。実際、これはすべてのメソッドに当てはまるはずsetです。あなたが考えているのはaddコマンドです。 addメソッドは累積的で、プッシュするすべてのリストを作成しますが、setメソッドは単数形で、既存のデータを置き換えます。

于 2012-10-13T20:28:11.953 に答える
15

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();

ここに画像の説明を入力

次のように、プログラムで 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);
于 2012-10-13T20:51:34.763 に答える