заполнение RecyclerView в диалоге - PullRequest
0 голосов
/ 21 января 2019

Я нашел решение и оно прикреплено в качестве ответа

В настоящее время у меня возникают проблемы при заполнении макета в диалоговом окне информацией из моего адаптера.Данные извлекаются из API и передаются в мой класс данных, но так как представление recycler, на которое я пытаюсь ссылаться, находится в файле макета Dialog, а не в файле, который я использую для вызова указанного диалога, представление просто возвращает нуль.

Вот мой код для контекста.

CheckboxActivity.kt (только обратный вызов) people_list возвращает нуль

private val callbackGETUSERS = object : Callback<List<Users>> {
    override fun onFailure(call: Call<List<Users>>, t: Throwable) {
        Log.e("API-GET-USERS", "Problem GETTING USERS", t)        }

    override fun onResponse(call: Call<List<Users>>, response: Response<List<Users>>) {

        val result = UsersResult(response.body() ?: return run {
            Log.e("API-ME", "Problem calling USERS")
        })

        peopleList = result
        people_list.adapter = ManagePeopleAdapter(result)
    }

}

d_manage_people.xml (файл ресурсов диалога)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="16dp">

<TextView
        android:id="@+id/manage_people_title"
        android:gravity="center"
        android:height="24dp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        style="@style/Subtitle1"
        android:text="Create Item"
        android:layout_marginBottom="16dp"
        android:layout_gravity="center"/>

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/people_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</androidx.recyclerview.widget.RecyclerView>

и вот моя ошибка

java.lang.IllegalStateException: people_list must not be null

Кстати, я использую плагинчто позволяет мне не использовать findViewById

Любая помощь будет принята:)

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Дело в том, что я не подключил контекст представления

Вместо вызова Recycler View в CallBack, как

people_list

и затем установив адаптер оттуда, я просто вызвал функцию обратного вызова, которая затем создала диалоговое окно, и я использовал контекст для этого, чтобы добраться до RecyclerView

 val dialog = AlertDialog.Builder(this)
    val view = layoutInflater.inflate(R.layout.d_manage_people, null)
    dialog.setView(view)

    view.manage_people_title.text = "Manage People"

    val adapter = ManagePeopleAdapter(result)
    view.people_list.adapter = adapter
    view.people_list.layoutManager = LinearLayoutManager(this)
0 голосов
/ 21 января 2019

Вы можете отобразить диалог после вызова API.Примерно так:

private val callbackGETUSERS = object : Callback<List<Users>> {
    override fun onFailure(call: Call<List<Users>>, t: Throwable) {
        Log.e("API-GET-USERS", "Problem GETTING USERS", t)        }

    override fun onResponse(call: Call<List<Users>>, response: Response<List<Users>>) {
        val result = UsersResult(response.body() ?: return run {
            Log.e("API-ME", "Problem calling USERS")
        })
        peopleList = result
        this@CheckboxActivity.showDialog()
    }
}

private fun showDialog() {
    val dialog = AlertDialog.Builder(this)
    val view = layoutInflater.inflate(R.layout.d_manage_people, null)
    view.manage_people_title.text = "Manage People" 
    people_list = view.findById(R.id.people_list)
    people_list.adapter = ManagePeopleAdapter(peopleList)
    dialog.setView(view)
    dialog.show() }
}

И просто вызовите API по нажатию кнопки.

onPeopleClicked(view: View) {
    dataRetriever.getUsers(callbackGETUSERS, getAuth(), listID)
}
...