You need to enable JavaScript to run this app. 使用Kotlin为Fragment添加GridView触发NPE错误,组件无法填充数据
优惠活动
大模型
产品
解决方案
定价
更多

使用Kotlin为Fragment添加GridView触发NPE错误,组件无法填充数据

问题根源

你在HomeFragment中启用了ViewBinding,但访问GridView控件时未通过绑定实例binding调用,直接使用控件IDcardview_grid无法获取到Fragment布局中的控件实例,对象为空调用setAdapter就会触发空指针异常。

修复方案

  1. 核心修改:调整onCreateView中GridView的adapter赋值逻辑,通过binding访问控件:
override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
    _binding = FragmentHomeBinding.inflate(inflater, container, false)
    arrayList = ArrayList<Item>()
    arrayList.add(Item("Copacabana", R.drawable.item_copacabana_image, "19"))
    // 用requireActivity替代activity,避免上下文空指针
    adapterHome = ItemAdapter_home(requireActivity(), arrayList)
    // 新增binding前缀,通过ViewBinding实例访问控件
    binding.cardview_grid.adapter = adapterHome
    return binding.root
}
  1. 额外优化点,避免后续出现其他崩溃:
  • 修复适配器getItem方法的错误逻辑,原逻辑返回position,应返回对应位置的Item数据:
override fun getItem(position: Int): Any = list[position]
  • 适配器的getView方法复用convertView减少性能消耗,避免每次都inflate新布局,同时不要用!!强转上下文:
override fun getView(p0: Int, convertView: View?, p2: ViewGroup): View {
    val item = list[p0]
    val view = convertView ?: LayoutInflater.from(ctx).inflate(R.layout.grid_item, p2, false)
    view.prog_img_home.setImageResource(item.prog_img_home)
    view.prog_name_home.text = item.prog_name_home
    view.nb_clap_home.text = item.nb_clap_home
    return view
}

内容的提问来源于stack exchange,提问作者b4tos4i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 01:36:01