【发布时间】:2019-03-06 10:37:35
【问题描述】:
我有一个问题:
RecyclerView:没有附加适配器;跳过布局
我无法在OnCreate 中定义适配器,因为列表尚未准备好。
如何在OnCreate 中定义适配器?或者有什么可能的解决方案来解决我的问题?
【问题讨论】:
标签: android kotlin android-recyclerview
我有一个问题:
RecyclerView:没有附加适配器;跳过布局
我无法在OnCreate 中定义适配器,因为列表尚未准备好。
如何在OnCreate 中定义适配器?或者有什么可能的解决方案来解决我的问题?
【问题讨论】:
标签: android kotlin android-recyclerview
在 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" />
【讨论】:
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) {
}
}
【讨论】: