Recycleview в Котлине - PullRequest
       2

Recycleview в Котлине

0 голосов
/ 06 марта 2019

У меня проблема с:

RecyclerView: адаптер не подключен; пропускающий макет

Я не могу определить адаптер в OnCreate, потому что список не готов.

Как определить адаптер в OnCreate? или как можно решить мою проблему?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Это нормально, если у вас нет данных в onCreate.Что вам нужно сделать, это определить адаптер и связать его с вашим RecyclerView.Как только вы подготовите данные, добавьте данные в список в adapter и сообщите об этом.Пример как показано ниже

class MyAdapter: RecyclerView.Adapter<MyViewHolder>() {
    private val data = mutableListOf<MyModel>()

    override fun getItemCount() = data.count()

    fun addData(data : MyModel) {
        // add single data the list or call addAll() to add a group of data. 
        // just remember not to replace the variable
    }

    fun clearData() {

    }

    fun deleteData(id: Int) {

    }
}
0 голосов
/ 06 марта 2019

В процессе создания я сделал:

  adapter = MyAdapter(this@MyActivity)
  adapter.data = ArrayList()

Потом я просто установил adapter.date = xxx

В моем адаптере у меня есть:

class MyAdapter(val activity: MyActivity) :
        RecyclerView.Adapter<MyAdapter.BodyViewHolder>() {

    var data: MutableList<MyModel>? = null
        set(value) {
            field = value
            notifyDataSetChanged()
        }

    override fun getItemCount() = data?.size ?: 0

    fun ViewGroup.inflate(@LayoutRes layoutRes: Int, attachToRoot: Boolean = false): View {
        return LayoutInflater.from(context).inflate(layoutRes, this, attachToRoot)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BodyViewHolder {
        val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.my_layout, parent, false)
        return BodyViewHolder(view)
    }

    override fun onBindViewHolder(holder: BodyViewHolder, position: Int) {
        holder.bindValue(data?.get(position), activity)
    }

    class BodyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bindValue(record: MyModel?, activity: MyActivity) {
            record?.let {
                itemView.mTextView.text = ....
            }
        }
    } 
}

Стоит отметить, что высота моего окна рециркуляции равна wrap_content

 <android.support.v7.widget.RecyclerView
            android:id="@+id/mRecyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...