Я успешно создал рабочую AlertDialog для моего Android приложения:Нужна помощь в получении пользовательского макета работать с моим Android AlertDialog
public class MyClass extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
ArrayList selectedItems = new ArrayList();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.pick_toppings)
builder.setMultiChoiceItems(R.array.my_array, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
selectedItems.remove(Integer.valueOf(which));
}
}
});
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// do stuff here ...
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// do stuff here ...
}
});
return builder.create();
}
}
Этот список MultiChoiceItems опирается на массив в /res/values/array.xml
<resources>
<array name="my_array">
<item>item 01</item>
<item>item 02</item>
<item>item 03</item>
<item>item 04</item>
<item>item 05</item>
</array>
</resources>
С моей деятельности я вызываю AlertDialog следующим образом:
MyClass myClass = new MyClass();
myClass.show(getSupportFragmentManager(), "My Dialog");
Теперь я хочу использовать пользовательский макет с AlertDialog, чтобы я мог делать такие вещи, как чередование строк, настраиваемые кнопки и добавлять EditText, чтобы у меня была опция «другой» с возможностью заполнения "Другие".
После выполнения некоторых поисковых запросов, похоже, мне нужно создать новый макет и установить вид AlertDialog на этот макет. Таким образом, я создал макет:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="other"
android:textSize="18sp"/>
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Затем я добавил это к моему классу DialogFragment:
LayoutInflater layoutInflater = getActivity().getLayoutInflater();
View view = layoutInflater.inflate(R.layout.my_new_layout, null);
затем
builder.setView(view);
Как вы можете догадаться, это не сработало. Новый CheckBox и EditText был вставлен после моих других флажков, которые были заполнены из моего массива, но выглядит ужасно, и я не вижу никакого контроля над появлением флажков, созданных из массива.
Как я уже сказал, я хотел бы добавить эту новую комбинацию CheckBox/EditText, а также иметь возможность настраивать внешний вид всего AlertDialog.
Я действительно хочу использовать массив от /res/values/array.xml
, так что мне не нужно жестко кодировать новую опцию, если я хочу добавить новые элементы в список.
Является ли то, что я желаю сделать возможным? Если да, то некоторые советы будут замечательными.
Благодаря
Это то, что я хотел бы мой AlertDialog смотреть/акт как:
Мне любопытно, почему вы добавляете представления программно, а не только с помощью xml? Вы ничего особенного не делаете. –
Потому что я хотел бы создать представления из потенциально меняющегося списка входов (т. Е. У меня может быть 5 сегодня, но 15 в следующем году). Таким образом, мне не нужно возвращаться и жестко кодировать еще 10 флажков для изменения; Мне просто нужно обновить массив в '/ res/values / array.xml', и все остальное обновляется автоматически. – Brian
Имеет смысл, думаю, я пропустил цикл for в последний раз, читая его :) –