未连接适配器;跳过布局 ||安卓异常

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

Logcat

我的应用程序中有一个底部导航栏,在应用程序启动时,它首先显示来自 API 的 recyclerview 数据,但如果我导航到其他片段并返回,它不会加载。每次我单击 ExploreFragment 时,recyclerview 数据都会变空并在 Logact 中显示此错误。

class ExploreFragment : Fragment(), ClickListener {

    private lateinit var binding: FragmentExploreBinding
    private lateinit var recyclerView: RecyclerView // Declare the recyclerView here
    private lateinit var categoryAdapter: CategoryAdapter // Declare the adapter here


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        binding = FragmentExploreBinding.inflate(inflater, container, false)
        val view = binding.root

        // Find views
        val viewPager: ViewPager = binding.viewPager
        val tabLayout: TabLayout = binding.tabLayout
        recyclerView = binding.recyclerView // Initialize recyclerView here


//        viewPager.startAutoScroll();
//        viewPager.setInterval(3000);
//        viewPager.setCycle(true);
//        viewPager.setStopScrollWhenTouch(true);

        // Populate your images for the ViewPager
        val images = listOf(
            ImageItem(R.drawable.slider),
            ImageItem(R.drawable.slider),
            ImageItem(R.drawable.slider)
        )

        // Set up the ViewPager with the custom adapter
        val adapter = ImagePagerAdapter(requireContext(), images)
        viewPager.adapter = adapter

        // Set up TabLayout with ViewPager
        tabLayout.setupWithViewPager(viewPager, true)
        

        fetchCategories()


        binding.profilePicture.setOnClickListener {
            val intent = Intent(requireContext(), ViewProfileActivity::class.java)
            startActivity(intent)
        }


        return view
    }

    override fun onCategoryItemClick(categoryItem: CategoryItem) {
        // Handle item click, navigate to the full-screen view
        val intent = Intent(requireContext(), CategoryDetailActivity::class.java)
        intent.putExtra("CATEGORY_NAME", categoryItem.name)
        intent.putExtra("CATEGORY_IMAGE_RES_ID", categoryItem.imageResId)
        startActivity(intent)
    }

    private fun fetchCategories() {
        val apiService: API = RetrofitClient.getRetrofitInstance()!!.create(API::class.java)
        val authToken = "Bearer ${PreferenceUtil.getStringValueForKey(key = AUTH_TOKEN)}"

        val call = apiService.getCategories(authToken)
        call.enqueue(object : Callback<CategoryWelcome> {
            override fun onResponse(call: Call<CategoryWelcome>, response: Response<CategoryWelcome>) {
                if (response.isSuccessful) {
                    val categoryWelcome = response.body()

                    if (categoryWelcome != null && categoryWelcome.status) {
                        val categories = categoryWelcome.category

                        val categoryItems = categories.map { category ->
                            CategoryItem(category.name, category.image)
                        }

                        if (!::categoryAdapter.isInitialized) {
                            val layoutManager = GridLayoutManager(requireContext(), 2)
                            recyclerView.layoutManager = layoutManager
                            categoryAdapter = CategoryAdapter(categoryItems, this@ExploreFragment)
                            recyclerView.adapter = categoryAdapter
                        } else {
                            categoryAdapter.updateData(categoryItems)
                        }
                    } else {
                        Log.e("API", "Invalid response: ${categoryWelcome?.message}")
                    }
                } else {
                    Log.e("API", "Error: ${response.code()}")
                }
            }
            override fun onFailure(call: Call<CategoryWelcome>, t: Throwable) {
                if (isAdded) { // Check if the fragment is still attached
                    Log.e("API Error", "API request failed with code: ${t.message}")
                }
            }
        })
    }}

这是我的片段代码。

我尝试在调用 fetchCategories 函数之前初始化适配器,但如果我这样做,应用程序会在导航到 exploreFragment 时崩溃。

android api kotlin android-studio android-recyclerview
1个回答
0
投票

您使用片段的哪种方法

add
replace
进行导航?

© www.soinside.com 2019 - 2024. All rights reserved.