AlerDialog с настраиваемой компоновкой
Я создал этот макет, поэтому я мог бы работать с этим alertdialog. Я создал его, потому что я должен сохранять состояния после нажатия, а также, когда я открываю диалог, я могу получить значение, которое было ранее отмечено. Поиск по настройкам.
Но, даже принося активность, я не могу получить их удостоверение личности, очевидно, потому что они не находятся в макете деятельности.
Как я могу работать с этим макетом?
- Как проверить, вставлены ли данные в базу данных комнаты
- Невозможно запустить аниматор в отдельном представлении
- Информация о Facebook не отображается
- При использовании setcontentview в BottomsheetDialog возникает ошибка, например: «ни одна из следующих функций не может быть вызвана с предоставленными аргументами»
- Лучший способ комбинировать целые флаги с использованием Kotlin?
Код:
R.layout.alertdialog_radiobutton_account >> my layout
Функция:
fun onWhoCanContactMeClicked (activity: Activity) {
val dialog: AlertDialog.Builder = AlertDialog.Builder(activity) dialog.setTitle(activity.getString(R.string.whocancontact_settings)) .setView(R.layout.alertdialog_radiobutton_account) .setPositiveButton(activity.getString(R.string.ok_dialog)) { p0, p1 -> //TODO After click set state } .setNegativeButton(activity.getString(R.string.cancel_dialog)) { p0, p1 -> p0.dismiss() //dismiss dialog } .create() .show()
}
XML:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="viewModel" type="com.plugapps.zuk.viewmodel.AccountViewModelKotlin"> </variable> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="@dimen/margin_large" android:orientation="vertical"> <RadioGroup android:id="@+id/rdg_dialog_account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/margin_large" android:orientation="vertical"> <RadioButton android:id="@+id/rdb1_contact" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="@string/everyone_dialog" android:textSize="16sp" /> <RadioButton android:id="@+id/rdb2_contact" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="@string/onlymycontacts_whocancontact_settings" android:textSize="16sp" /> <RadioButton android:id="@+id/rdb3_contact" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="@string/my_contacts" android:textSize="16sp" /> </RadioGroup> </LinearLayout> </layout>
Изображение макета:
- добавить Google Fit distance (DataPoint выходит за пределы диапазона)
- Ошибка: выполнение выполнено для задачи ': app: clean'. Не удалось удалить файл
- Функции расширения Котлина внезапно требуют уровня api 24
- Инициализация RecyclerView с привязкой данных Android в Котлине вызывает ошибку. Что я делаю не так?
- Как уведомить Observable при завершении CountdownTimer
- Неразрешенный справочник с использованием Kotlin для android
- Тестирование на Android-модуле класса Kotlin завершилось неудачей с «не может найти класс символов ...»
- Android kotlin переопределяет методы интерфейса внутри метода onCreateView ()
Вы используете этот api https://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView(int)
Я предлагаю раздуть dialogView
самостоятельно, затем используйте этот метод https://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView(android.view.View)
а затем внутри обратного вызова кнопки вы можете использовать dialogView.findById
Вы можете создать CustomDialogFragment с помощью DialogFragment. И вы можете привязать свои взгляды.
public class CustomDialogFragment extends DialogFragment { public static final String TAG = "CustomDialogFragment"; private View mRootView; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(R.layout.YOUR_LAYOUT, container, false); ButterKnife.bind(this, mRootView); return mRootView; } @OnClick(R.id.button_done) public void onDoneClicked() { } @OnClick(R.id.button_cancel) public void onCancelClicked() { } }
Теперь в вашем MainActivity:
CustomDialogFragment mDialog = new CustomDialogFragment(); mDialog .show(getSupportFragmentManager(), CustomDialogFragment.TAG);
Попробуй это
val bu = activity.findViewById<RadioButton>(R.id.rdb3_contact)
Попробуйте это, это работа для меня
val inflater = layoutInflater val dialogLayout = inflater.inflate(R.layout.alert, null) val builder = AlertDialog.Builder(this) builder.setView(dialogLayout) val alertDialog = builder.show() val rb1 = alertDialog.findViewById<RadioButton>(R.id.rdb1_contact) rb1?.setChecked(true)
Вот измененная функция, так как я сделал это, и это сработало для меня:
fun onWhoCanContactMeClicked(activity: Activity) { val li: LayoutInflater = activity.layoutInflater val view: View = li.inflate(R.layout.alertdialog_radiobutton_account, null) var rgb1: RadioGroup = view.findViewById(R.id.rdg_dialog_account) var rdb0: RadioButton = view.findViewById(R.id.rdb1_contact) var rdb1: RadioButton = view.findViewById(R.id.rdb2_contact) var rdb2: RadioButton = view.findViewById(R.id.rdb3_contact) when (whoCanContactMe) { //esta variável é um Int 1 -> rgb1.check(rdb1.id) 2 -> rgb1.check(rdb2.id) else -> rgb1.check(rdb0.id) } val dialog: AlertDialog.Builder = AlertDialog.Builder(activity) dialog.setTitle(activity.getString(R.string.whocancontact_settings)) .setView(view) .setPositiveButton(activity.getString(R.string.ok_dialog)) { dialog, wich -> whoCanContactMe = when { rdb1.isChecked -> 1 rdb2.isChecked -> 2 else -> 0 } } .setNegativeButton(activity.getString(R.string.cancel_dialog)) { p0, p1 -> p0.dismiss() //dismiss dialog } .create() .show() }