我正在为一个大学的项目工作,该项目将允许用户在 map 上放置一个点,然后设置叠加层对象的标题和描述。问题是,第二个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);

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

最佳答案

对话框仅包含一个根 View ,这就是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

(这是一个基本示例,但它应该可以帮助您入门。)

您应该注意setadd方法之间的命名差异。 setView()仅保存一个 View ,setMessage()也是如此。实际上,对于每种set方法,这都是正确的,您正在考虑的是add命令。 add方法是累积性的,它们构建了您要推送的所有内容的列表,而set方法是单数形式,它们替换了现有数据。

10-06 06:54