播放主要片段中回收器视图中API的项目 我尝试显示此API的项目 API链接 https://www.themealdb.com/api/json/v1/1/categories.php 进行logcat后,所有条件都是真实和有效的,所有相应的适配器...

问题描述 投票:0回答:1

https://www.themealdb.com/api/json/v1/1/categories.php

uupon进行logcat所有条件都是真实的,有效的,所有相应的适配器都在调用,但项目没有在recyclerview

中显示 我已获得Intenet许可,并添加了适当的旋律依赖性,改造,毕加索用于显示图像 可能是可能的问题以及如何解决问题,任何帮助都将不胜感激。

这是我的房屋范围文件

import retrofit2.HttpException 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 android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.ambrosia.Adaptors.catAdap import com.example.ambrosia.RetroInstance import com.example.ambrosia.databinding.FragmentHomeBinding import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.IOException class HomeFragment : Fragment() { private var _binding: FragmentHomeBinding? = null private val binding get() = _binding!! private lateinit var myAdapter: catAdap private lateinit var rv :RecyclerView private val job = Job() private val coroutineScope = CoroutineScope(Dispatchers.Main + job) private var isDataLoaded = false // Track if data has been loaded override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentHomeBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) rv = binding.rvCategory rv.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) myAdapter = catAdap(this@HomeFragment, emptyList()) rv.adapter = myAdapter if (!isDataLoaded){ Log.d("homefragment", "onViewCreated: fetchcategories called sucessfully") fetchCategories() } } private fun fetchCategories() { coroutineScope.launch { val response = try { RetroInstance.api.getCategory() } catch (e: HttpException) { Log.e("HomeFragment", "Http Error: ${e.message}", e) withContext(Dispatchers.Main) { Toast.makeText(requireContext(), "Network Error", Toast.LENGTH_SHORT).show() } return@launch } catch (e: IOException) { Log.e("HomeFragment", "I/O Error: ${e.message}", e) withContext(Dispatchers.Main) { Toast.makeText(requireContext(), "Network Error", Toast.LENGTH_SHORT).show() } return@launch } catch (e: Exception) { Log.e("HomeFragment", "Generic Error: ${e.message}", e) withContext(Dispatchers.Main) { Toast.makeText(requireContext(), "An Error Occured", Toast.LENGTH_SHORT).show() } return@launch } withContext(Dispatchers.Main) { if (response.categories.isNotEmpty()) { Log.d("HomeFragment", "Category list size: ${response.categories.size}") myAdapter.catlist = response.categories Log.d("HomeFragment", "after cat;ist called line 2") myAdapter.notifyDataSetChanged() Log.d("HomeFragment", "after notifydtasetchange") myAdapter.onItemClick = { category -> // Handle item click here Log.d("HomeFragment", "Clicked on category: ${category.strCategory}") } } else { Log.w("HomeFragment", "Category list is empty") Toast.makeText(requireContext(), "No Categories Found", Toast.LENGTH_SHORT).show() } } } } override fun onDestroyView() { super.onDestroyView() _binding = null job.cancel() } }

这是我的回复库的适配器

package com.example.ambrosia.Adaptors import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import com.example.ambrosia.Models.Category import com.example.ambrosia.R import com.squareup.picasso.Picasso class catAdap(val context: Fragment, var catlist: List<Category>) : RecyclerView.Adapter<catAdap.MyViewHolder>(){ lateinit var onItemClick: ((Category) -> Unit) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { val itemView = LayoutInflater.from(context.requireContext()) .inflate(R.layout.itemdefine, parent, false) // Inflate your item layout return MyViewHolder(itemView) } override fun getItemCount(): Int { return catlist.size } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val currentItem =catlist[position] Log.d("TAG", "onBindViewHolder: item displayed succesfully") Picasso.get() .load(currentItem.strCategoryThumb) .into(holder.img) Log.d("TAG", "onBindViewHolder: item displayed after picasso") holder.itemView.setOnClickListener { onItemClick.invoke(currentItem) } } class MyViewHolder (itemView: View) : RecyclerView.ViewHolder(itemView) { val img :ImageView init { img = itemView.findViewById(R.id.rvImg) } } }

fetchCategory

中调整
HomeFragment
函数
kotlin android-studio android-recyclerview kotlin-coroutines picasso
1个回答
0
投票

update构造函数参数的

accessmodifier
在适配器中
catAdap
适配器中的ADD遵循方法

class catAdap(val context: Fragment, private var catlist: List<Category>) :

catAdap 现在,从片段中更新您的列表如下:

fun updateList(newList: List<Category>) {
    catlist = newList
    notifyDataSetChanged()
}

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.