WeatherApp #10: RecyclerView Adapter – Part 2

WeatherAdapter.kt

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.meter_alc_rgb.weatherappcursey.R
import com.meter_alc_rgb.weatherappcursey.databinding.ListItemBinding

class WeatherAdapter : ListAdapter<WeatherModel, WeatherAdapter.Holder>(Comparator()) {

class Holder(view: View) : RecyclerView.ViewHolder(view){
val binding = ListItemBinding.bind(view)

fun bind(item: WeatherModel) = with(binding){
tvDate.text = item.time
tvCondition.text = item.condition
tvTemp.text = item.currentTemp
}
}

class Comparator : DiffUtil.ItemCallback<WeatherModel>(){
override fun areItemsTheSame(oldItem: WeatherModel, newItem: WeatherModel): Boolean {
return oldItem == newItem
}

override fun areContentsTheSame(oldItem: WeatherModel, newItem: WeatherModel): Boolean {
return oldItem == newItem
}

}

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

override fun onBindViewHolder(holder: Holder, position: Int) {
holder.bind(getItem(position))
}
}

HouraFragment.kt

HouraFragment.kt

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.meter_alc_rgb.weatherappcursey.R
import com.meter_alc_rgb.weatherappcursey.adapters.WeatherAdapter
import com.meter_alc_rgb.weatherappcursey.adapters.WeatherModel
import com.meter_alc_rgb.weatherappcursey.databinding.FragmentHoursBinding

class HoursFragment : Fragment() {
private lateinit var binding: FragmentHoursBinding
private lateinit var adapter: WeatherAdapter

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentHoursBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initRcView()
}

private fun initRcView() = with(binding){
rcView.layoutManager = LinearLayoutManager(activity)
adapter = WeatherAdapter()
rcView.adapter = adapter
val list = listOf(
WeatherModel(
"","12:00",
"Sunny","25ºC",
"", "", "",""),
WeatherModel(
"","13:00",
"Sunny","25ºC",
"", "", "",""),
WeatherModel(
"","14:00",
"Sunny","35ºC",
"", "", "","")
)
adapter.submitList(list)
}

companion object {
@JvmStatic
fun newInstance() = HoursFragment()
}
}

1 комментарий для “WeatherApp #10: RecyclerView Adapter – Part 2”

  1. Добрый вечер, по непонятным причинам на данный момент ListItemBinding не работает, можете подсказать почему так может быть?

Добавить комментарий

Ваш адрес email не будет опубликован.