You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:Fragment中ListView点击调用Adapter.getItem报空对象错误

空指针报错根因

报错Attempt to invoke virtual method 'java.lang.Object com.example.securityaplication.ItemArrayAdapter.getItem(int)' on a null object reference的核心触发原因是变量作用域赋值错位,和你提到的Fragment运行环境、getContext()调用方式没有任何关联:

  • 类中定义的全局成员变量ItemArrayAdapter adapter全程没有被赋值,始终保持Java默认的null状态
  • 初始化列表时创建的itemArrayAdapter是onCreateView方法内的局部变量,仅被设置给ListView的Adapter属性,没有同步赋值给全局的adapter成员
  • 条目点击回调中调用adapter.getItem(position)时,自然会触发空对象调用错误。

你之前在其他Activity项目中能正常运行,本质是那个项目里的adapter是被正确初始化赋值的,和代码写在Activity还是Fragment里没有直接关系。

具体修复操作
  • 修正Adapter初始化逻辑,不再创建无意义的局部变量,直接给全局adapter成员赋值:
    原有错误代码段:
    ArrayList<ItemList> ItemList = new ArrayList<>();
    ItemArrayAdapter itemArrayAdapter = new ItemArrayAdapter(getActivity(), R.layout.adapter_view_layout,ItemList);
    listax.setAdapter(itemArrayAdapter);
    
    替换为正确逻辑:
    ArrayList<ItemList> itemList = new ArrayList<>();
    // 直接给全局声明的adapter变量赋值
    adapter = new ItemArrayAdapter(getActivity(), R.layout.adapter_view_layout, itemList);
    listax.setAdapter(adapter);
    
  • 上下文使用说明:Fragment中调用getContext()作为Toast的上下文完全合法,只要Fragment处于已附加到宿主Activity的状态,该方法就不会返回null,不需要强制替换为其他上下文获取方式。
  • PopupMenu调用优化:完成空指针修复后,可直接解开条目点击回调中的showPopup注释,将回调参数里的被点击条目的view实例传入方法作为菜单锚点,即可实现点击对应条目弹出菜单的效果:
    listax.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            ItemList item = adapter.getItem(position);
            Toast.makeText(getContext(), item.getTxtNomeItem().toString(), Toast.LENGTH_SHORT).show();
            // 传入当前点击的条目View作为PopupMenu锚点
            showPopup(view);
        }
    });
    
  • 额外小修正:当前onMenuItemClick回调里,itemEmprestar和itemRecuperar分支的Toast文案重复写的是“Item 3 clicked”,可以顺手修正成对应分支的提示内容,避免逻辑展示错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 14:06:04