我的应用程序中有一个底部导航栏,在应用程序启动时,它首先显示来自 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 时崩溃。
您使用片段的哪种方法
add
或 replace
进行导航?