簡體   English   中英

回收查看Kotlin

[英]Recycleview in Kotlin

我有以下問題:

RecyclerView:沒有附加適配器; 跳過布局

我無法在OnCreate中定義適配器,因為列表尚未准備好。

我如何在OnCreate中定義適配器? 或者解決我的問題的可能解決方案是什么?

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

    }
}

class adpCoba(val context: Context, val datalist:ArrayList):RecyclerView.Adapter<adpCoba.MyViewHolder>(){

class MyViewHolder (itemView:View):RecyclerView.ViewHolder(itemView){
    val text :TextView=itemView.findViewById(R.id.textcoba)
}

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

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    val currntItem = datalist [position]
    holder.text.text= currntItem.nama
}

override fun getItemCount(): Int {
    return datalist.size
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM