Показать список из адаптера в форме объекта массива - PullRequest
0 голосов
/ 13 октября 2018

Мне нужно показать список из адаптера.У меня есть данные с вызовом API, но они не могут отображаться в интерфейсе.

это таблица данных модели:

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

это таблицы моделей данных, которые содержат 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()
        }
    })
}

Я думаю, чтопроблема в адаптере, но я не знаю, как это исправить.Пожалуйста, помогите мне исправить это.

1 Ответ

0 голосов
/ 14 октября 2018

Мы думаем, что это проблема с именами. Вы используете эту строку кода, чтобы назвать своего держателя просмотра

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

Где вы его называете ViewHolderТогда вы начинаете использовать 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
}

}

...