RecyclerView не отображает список

Рейтинг: 0Ответов: 0Опубликовано: 31.03.2023

Получаю данные из 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>())
                }
            }
        }
    }
}

Ответы

Ответов пока нет.