Weather app #15 : Список прогноза по часам

HoursFragment

import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.meter_alc_rgb.weatherappcursey.MainViewModel
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
import org.json.JSONArray
import org.json.JSONObject

class HoursFragment : Fragment() {
private lateinit var binding: FragmentHoursBinding
private lateinit var adapter: WeatherAdapter
private val model: MainViewModel by activityViewModels()

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()
model.liveDataCurrent.observe(viewLifecycleOwner){
adapter.submitList(getHoursList(it))
}
}

private fun initRcView() = with(binding){
rcView.layoutManager = LinearLayoutManager(activity)
adapter = WeatherAdapter()
rcView.adapter = adapter

}

private fun getHoursList(wItem: WeatherModel): List<WeatherModel>{
val hoursArray = JSONArray(wItem.hours)
val list = ArrayList<WeatherModel>()
for(i in 0 until hoursArray.length()){
val item = WeatherModel(
wItem.city,
(hoursArray[i] as JSONObject).getString("time"),
(hoursArray[i] as JSONObject).getJSONObject("condition")
.getString("text"),
(hoursArray[i] as JSONObject).getString("temp_c"),
"",
"",
(hoursArray[i] as JSONObject).getJSONObject("condition")
.getString("icon"),
""
)
list.add(item)
}
return list
}

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

WeatherAdapter

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
import com.squareup.picasso.Picasso

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
Picasso.get().load("https:" + item.imageUrl).into(im)
}
}

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

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

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