AlertDialog中的多个EditText对象

Tom*_*eck 43 android google-maps dialog android-edittext

我正在开发一个大学项目,让用户在地图上放置一个点,然后设置叠加对象的标题和描述.问题是,第二个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);
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!!谢谢!

Sam*_*Sam 97

对话框只包含一个根视图,这就是setView()覆盖第一个EditText 的原因.解决方案很简单,将所有内容放在一个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
Run Code Online (Sandbox Code Playgroud)

(这是一个基本的例子,但它应该让你开始.)

您应该注意a setadd方法之间的命名法区别.setView()只持有一个View,同样是相似的setMessage().事实上,对于每种set方法都应如此,你所想的是add命令. add方法是累积的,它们构建了一个列表,列出了你在set方法是单数时推入的所有东西,它们取代了现有的数据.

  • @Tomcelic 是的,你可以做到,只需按顺序添加一个 TextView、EditText、TextView,最后添加一个 EditText,但我认为使用 layoutInflator 会更好 (2认同)
  • `LinearLayout.VERTICAL` 天哪,我要把所有的东西都从窗户扔出去,痛苦地大喊!!! (2认同)

K_A*_*nas 9

您可以构建包含两个EditText的布局,使用a对其进行充气,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();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以通过编程方式添加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);
Run Code Online (Sandbox Code Playgroud)

  • 说真的,每个答案都应该包含结果的图片。我用谷歌搜索这样的东西。我看到了这张照片。立马点了。 (2认同)