为什么ListView.setAdapter(null)没有抛出空指针异常?

时间:2014-12-18 00:51:01

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

我偶然发现了这个独特的发现。我的代码坏了,因为我在实现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为空。但是,我可以跨过它继续前进,而不会得到空指针异常。为什么我允许将null值传递给该函数?

1 个答案:

答案 0 :(得分:4)

  

为什么我可以将空值传递给该函数?

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