【问题标题】:Recycleview in KotlinKotlin 中的 Recyclerview
【发布时间】:2019-03-06 10:37:35
【问题描述】:

我有一个问题:

RecyclerView:没有附加适配器;跳过布局

我无法在OnCreate 中定义适配器,因为列表尚未准备好。

如何在OnCreate 中定义适配器?或者有什么可能的解决方案来解决我的问题?

【问题讨论】:

标签: android kotlin android-recyclerview


【解决方案1】:

在 onCreate 我做了:

  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" />

【讨论】:

    【解决方案2】:

    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) {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2021-04-02
      • 2021-11-28
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多