AlerDialog с настраиваемой компоновкой

Я создал этот макет, поэтому я мог бы работать с этим alertdialog. Я создал его, потому что я должен сохранять состояния после нажатия, а также, когда я открываю диалог, я могу получить значение, которое было ранее отмечено. Поиск по настройкам.

Но, даже принося активность, я не могу получить их удостоверение личности, очевидно, потому что они не находятся в макете деятельности.

Как я могу работать с этим макетом?

Код:

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> 

Изображение макета:

введите описание изображения здесь

Вы используете этот 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() } 
  • Методы ведения журнала Anko не могут быть решены
  • Проблемы с настройкой комнаты Kotlin в Android Studio
  • Location имеет значение null, если GoogleMap не инициализируется снова
  • Как получить данные Google Fit Step с сервера?
  • Android-приложение без классов?
  • Как найти имя переменной из string-массива в strings.xml
  • Kotlin: обходной путь для no lateinit при использовании настраиваемого сеттера?
  • как получить доступ к данным arraylist в kotlin
  • Добавить данные в Recyclerview в Kotlin Android
  • Неразрешенный справочник KClass пытается использовать DBFlow и Kotlin с Android
  • Почему myDayForecast.map пуст?
  • Давайте будем гением компьютера.