В какой момент я могу редактировать представления в AlertView - PullRequest
0 голосов
/ 24 марта 2020

Я хочу создать универсальный c диалог AlertView с моим настраиваемым конструктором диалогов. Мой диалог должен иметь несколько TextViews и кнопок, которые должны отображаться, только если текст был задан ранее. Моя проблема в том, что я не могу найти точку, где я могу безопасно получить доступ к этим представлениям без получения NullPointerException.

Это мой класс DialogBuilder

class DialogBuilder : DialogFragment() {

...

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(activity)
        val inflater = activity?.layoutInflater
        val view = inflater?.inflate(R.layout.dialog_builder_fragment, null)
        builder.setView(view)
        val dialog = builder.create()
        fillViews()
        initListeners()
        return dialog
    }

...

private fun fillViews() {
        if (headline.isNotBlank()) {
            headline_text_view.text = headline
            headline_text_view.visibility = View.VISIBLE
        }
        ...
}

Исключение выдается в fillViews, когда я хочу установить заголовок текста. Я попробовал это с onViewCreated (), onStart (), ... но, похоже, ничего не работает. Как я могу это реализовать?

1 Ответ

1 голос
/ 24 марта 2020

при условии, что ваши headLine и headline_text_view находятся внутри dialog_builder_fragment. Вы должны передать view как параметр функции fillViews, а затем вызвать ваши текстовые представления следующим образом.

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val builder = AlertDialog.Builder(activity)
    val inflater = activity?.layoutInflater
    val view = inflater?.inflate(R.layout.dialog_builder_fragment, null)
    builder.setView(view)
    val dialog = builder.create()
    fillViews(view)
    initListeners()
    return dialog
}

...

private fun fillViews(view: View) {
    if (view.headline.isNotBlank()) {
        view.headline_text_view.text = headline
        view.headline_text_view.visibility = View.VISIBLE
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...