【问题标题】:Why doesn't ListView.setAdapter(null) throw a null pointer exception?为什么 ListView.setAdapter(null) 不抛出空指针异常?
【发布时间】:2014-12-18 00:51:00
【问题描述】:

我偶然发现了这个独特的发现。我的代码坏了,因为在我之前没有异常的情况下实现 LoaderManager 后,我在适配器上得到了 NullPointerException

所以,我使用调试器并逐步执行我的 onCreate 方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);

    // Irrelevant code removed

    mDrawerListView.setAdapter(mAccountAdapter);
    return mDrawerListView;
}

不相关的代码仅包括添加页脚视图和设置 onClickListeners,但在此方法(或任何其他方法)中,我没有一次将某些内容分配给 mAccountAdapter。我知道我应该这样做,而且我会这样做,但我犯了忘记这样做的错误。

当我使用调试器并在setAdapter(mAccountAdapter) 行设置断点时,我可以看到mAccountAdapter 为空。但是,我可以跳过它并继续前进,而不会出现空指针异常。为什么允许我将空值传递给该函数?

【问题讨论】:

    标签: java android android-listview nullpointerexception android-adapter


    【解决方案1】:

    为什么允许我将空值传递给该函数?

    你为什么不呢?毕竟,ListView 在您第一次创建它时以null 适配器开头。如果您查看the source for ListView 及其祖先,他们会检查mAdapter(将保存当前Adapter 的数据成员)是否为null

    【讨论】:

    • 我确实逐步了解了其中的一些内容,但并没有完全理解。也许我应该花点时间,再慢一点。我不知道它是从一个空适配器开始的,并且知道这更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多