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()
}
}

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

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

  2. Добрый вечер! Почему то не хочет инициализировать класс adapter.
    adapter = WeatherAdapter()
    Перед этим создала глобальную переменную. В ошибке выводит неинициализированный абстрактный класс. Все методы решения, которые предлагают не действуют. Подскажите пожалуйста.

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

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