Slide 65
Slide 65 text
TasksAdapter
class TasksAdapter(private val repository: TaskRepository) :
RecyclerView.Adapter() {
private var items = listOf()
fun setData(items:List){
this.items = items
this.notifyDataSetChanged()
}
override fun getItemCount(): Int {
return this.items.size
}
override fun getItemViewType(position: Int): Int {
val item = this.items.get(position)
return when(item){
is TaskItem.Ad-> ViewType.Ad.type
is TaskItem.Task -> ViewType.Task.type
else -> TODO()
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
val viewTypeEnum = ViewType.from(viewType)
val layoutInflater = LayoutInflater.from(parent!!.context)
return when(viewTypeEnum){
ViewType.Ad -> TaskAdViewHolder(DataBindingUtil.inflate(layoutInflater,
R.layout.item_task_ad, parent, false))
ViewType.Task -> TaskViewHolder(DataBindingUtil.inflate(layoutInflater, R.layout.item_task,
parent, false))
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
if(holder != null){
val item = this.items.get(position)
when (holder) {
is TaskViewHolder -> {
val viewModel = TaskItemViewModel.Task(item as TaskItem.Task, repository)
holder.binding.viewModel = viewModel
holder.binding.executePendingBindings()
}
is TaskAdViewHolder -> {
val viewModel = TaskItemViewModel.Ad(item as TaskItem.Ad)
holder.binding.viewModel = viewModel
holder.binding.executePendingBindings()
}
}
}
}
enum class ViewType(val type : Int){
Ad(0),
Task(1);
companion object {
fun from(value:Int) : ViewType{
return ViewType.values().first { it.type == value }
}
}
}
class TaskAdViewHolder(val binding: ItemTaskAdBinding) : RecyclerView.ViewHolder(binding.root)
class TaskViewHolder(val binding: ItemTaskBinding) : RecyclerView.ViewHolder(binding.root)
}
長い!!のでポイントだけ・・・