Newer
Older
TagAndroid / app / src / main / kotlin / org / ntlab / tag / adapter / RoomListAdapter.kt
MatsumotoKeiju on 9 Jul 2017 1 KB [add] TagAndroid Project
package org.ntlab.tag.adapter

import android.content.Context
import android.databinding.DataBindingUtil
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.ntlab.tag.R
import org.ntlab.tag.api.regist.RoomApiResponse
import org.ntlab.tag.contract.RoomListViewContract
import org.ntlab.tag.databinding.RoomListItemBinding
import org.ntlab.tag.viewmodel.ListItemViewModel

/**
 * Created by matsumoto_k on 2017/07/07.
 */
class RoomListAdapter(var context: Context, var view: RoomListViewContract) : RecyclerView.Adapter<RoomListAdapter.ViewHolder>() {

    var items: ArrayList<RoomApiResponse>? = null

    inner class ViewHolder(itemView: View, viewModel: ListItemViewModel) : RecyclerView.ViewHolder(itemView) {
        var viewModel: ListItemViewModel? = null

        init {
            this.viewModel = viewModel
        }

        fun loadItem(item: RoomApiResponse) {
            viewModel?.loadItem(item)
        }
    }

    fun setItemAndRefresh(items: ArrayList<RoomApiResponse>) {
        this.items = items
        notifyDataSetChanged()
    }

    fun getItemAt(position: Int): RoomApiResponse? {
        return items?.get(position)
    }

    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
        val item = getItemAt(position)
        holder?.loadItem(item!!)
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
        val binding = DataBindingUtil.inflate<RoomListItemBinding>(LayoutInflater.from(context), R.layout.room_list_item, parent, false)
        binding.viewModel = ListItemViewModel(view)
        return ViewHolder(binding.root, binding.viewModel!!)
    }

    override fun getItemCount(): Int {
        if (items == null) {
            return 0
        }
        return items?.size!!
    }
}