簡體   English   中英

以數組對象形式顯示適配器的列表

[英]Show list from adapter in Object of Array form

我需要顯示適配器的列表。 我已經通過調用api獲得了數據,但是無法在界面中顯示。

這是數據模型表:

data class Table(val id : String, val nama: String, val tersedia: Boolean)

這是包含Table的ArrayList的數據模型表:

data class Tables (val daftarMeja : ArrayList<Table>)

這是畝適配器:

class MejaAdapter (private val tableList: ArrayList<Table>, private val clickListener: (Table) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){

private lateinit var tables: Tables
override fun getItemCount(): Int {
    return tableList.size
}

fun updateData(dataBaru: ArrayList<Table>) {
    tableList.clear()
    tableList.addAll(dataBaru)
    Log.i("tableListAdapter","balbalbla" + tableList.toString())
    notifyDataSetChanged()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    val layoutInflater = LayoutInflater.from(parent.context)
    val cellForRow = layoutInflater.inflate(R.layout.item_meja,parent,false)
    return PartViewHolder(cellForRow)
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    (holder as PartViewHolder).bind(tableList[position], clickListener)
}

class PartViewHolder (itemView: View): RecyclerView.ViewHolder(itemView){
    fun bind(table: Table, clicklistener: (Table) -> Unit){
        itemView.tv_table_name.text = table.nama
        if(table.tersedia){
            itemView.container_table.setBackgroundResource(R.color.colorTableAvailable)
            itemView.tv_table_name.setTextColor(Color.BLACK)
        }
        else {
            itemView.container_table.setBackgroundResource(R.drawable.gradient)
            itemView.tv_table_name.setTextColor(Color.WHITE)
        }
        itemView.setOnClickListener {clicklistener(table)}
    }
}

}

這個有趣的活動:

private lateinit var tableList: ArrayList<Tables>
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_daftar_meja)

    tableList = ArrayList()

    /*init RecyclerView*/
    recyclerView_meja.layoutManager = GridLayoutManager(this, numberOfColumns(), GridLayoutManager.VERTICAL, false)
    recyclerView_meja.hasFixedSize()

    /*Set Adapter*/
    dataAdapter = MejaAdapter(tableItem) { tableItemClicked() }
    recyclerView_meja.adapter = dataAdapter

    //Show list table
    val idCafe = user.cafeId
    getTableList(idCafe)

}

private fun getTableList(idCafe:String){
    val apiService : Service = Client.getClient()!!.create(Service::class.java)
    apiService.getTable(idCafe).enqueue(object : Callback<Tables>{

        override fun onResponse(call: Call<Tables>?, response: Response<Tables>?) {

            Log.i("IdMeja", "id : " + response?.body())
            if (response != null && response.isSuccessful) {
                val listTable = response.body()
                if (listTable == null) {
                    Toast.makeText(this@MainActivity, "Tidak ada meja", Toast.LENGTH_SHORT).show()
                }
                else{
                    tables = listTable
                    // update list table

                    Log.i("adapter", "$dataAdapter")
                    dataAdapter.updateData(tableList)
                    Toast.makeText(this@MainActivity, "hahaha$tables", Toast.LENGTH_SHORT).show()
                }
            }
            else{
                Log.i("idCafe", " $idCafe")
                Toast.makeText(this@MainActivity, "Gagal dapat meja", Toast.LENGTH_SHORT).show()

            }
        }

        override fun onFailure(call: Call<Tables>?, t: Throwable?) {

            Log.i("fail",t.toString() )
            Toast.makeText(this@MainActivity, "Gagal", Toast.LENGTH_SHORT).show()
        }
    })
}

我認為問題出在適配器上,但我不知道如何解決。 請幫助我修復它。

我們認為這是一個命名問題,您可以使用此行代碼命名您的View Holder

class MejaAdapter (private val tableList: ArrayList<Table>, private val clickListener: (Table) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){

在何處命名ViewHolder
然后開始使用PartViewHolder
因此,更改代碼以使用一致的名稱PartViewHolder對我們PartViewHolder看起來不錯
這是我們的適配器查看使用的命名約定

class ViewAdapter(private val parents:List<ModelParent>):RecyclerView.Adapter<ViewAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.the_view,parent,false)
    return ViewHolder(view)
}

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

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val parent = parents[position]
    holder.textView.text = parent.dept
    holder.recyclerView.apply {
        layoutManager = LinearLayoutManager(holder.recyclerView.context, LinearLayout.VERTICAL, false)
        adapter = ViewChildAdapter(parent.children)
    }
}

inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView){
    val recyclerView : RecyclerView = itemView.rv_child
    val textView: TextView = itemView.textView
}

}

暫無
暫無

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

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