RecyclerView не отображает список
Получаю данные из API. В log видно, что данные пришли. Но фрагмент пустой. Я новичок, поэтому наверное где то накосячил. Буду рад, если кто посмотрит код опытным взглядом и скажет, в чем тут дело. Фрагмент:
class RecyclerViewFragment : Fragment() {
private var binding: FragmentRecyclerViewBinding? = null
private val viewModel: RecyclerViewModel by viewModels()
private val adapter: RecyclerViewAdapter = RecyclerViewAdapter()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentRecyclerViewBinding.inflate(inflater, container, false)
return binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.run {
viewModel.nameList.observe(viewLifecycleOwner) {
setList(it as ArrayList<Heroes>)
}
viewModel.getListCharacter("name")
}
}
private fun setList(heroes: ArrayList<Heroes>) {
binding?.run {
recyclerViewInFragment.layoutManager = GridLayoutManager(requireContext(), 2)
adapter.setListHeroes(heroes)
recyclerViewInFragment.adapter = adapter
recyclerViewInFragment.setHasFixedSize((true))
}
}
}
Адаптер:
private var list = ArrayList<Heroes>()
class RecyclerViewAdapter : RecyclerView.Adapter<HeroesViewHolder>(
) {
fun setListHeroes(heroes: ArrayList<Heroes>) {
list = heroes
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HeroesViewHolder {
return HeroesViewHolder(
ItemListRecyclerViewBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: HeroesViewHolder, position: Int) {
holder.bind(list[position])
}
override fun getItemCount(): Int =
list.size
companion object {
private val HeroesDiffCallback = object : DiffUtil.ItemCallback<Heroes>() {
override fun areItemsTheSame(oldItem: Heroes, newItem: Heroes): Boolean {
return false
}
override fun areContentsTheSame(oldItem: Heroes, newItem: Heroes): Boolean {
return false
}
}
}
}
Холдер:
class HeroesViewHolder(private val binding: ItemListRecyclerViewBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(name: Heroes) {
binding.textItem.text = name.toString()
}
}
ВьюМодель:
class RecyclerViewModel : ViewModel() {
val nameList = MutableLiveData<ArrayList<String>>()
private val repository = HeroesFactRepository()
fun getListCharacter(name: String) {
viewModelScope.launch(Dispatchers.IO) {
val response = repository.getListHeroesFact(name)
if (response?.isSuccessful == true) {
response.body()?.let {
nameList.postValue(it.listName ?: arrayListOf<String>())
}
}
}
}
}
Источник: Stack Overflow на русском