AblistView.java中的SetAdapter-有问题,还是我缺少什么?

AblistView.java中的SetAdapter-有问题,还是我缺少什么?,java,android,android-listview,Java,Android,Android Listview,我最近在我的ListView中得到了一个nullpointer异常(调用showContextMenuForChild),它是从AbsListView扩展而来的。我在我的网站上找不到错误,所以我查看了AbsListView的源代码,以找到这背后的原因 方法setAdapter在我看来有点奇怪: /** * {@inheritDoc} */ @Override public void setAdapter(ListAdapter adapter) { if (adapter != nu

我最近在我的ListView中得到了一个nullpointer异常(调用showContextMenuForChild),它是从AbsListView扩展而来的。我在我的网站上找不到错误,所以我查看了AbsListView的源代码,以找到这背后的原因

方法setAdapter在我看来有点奇怪:

/**
 * {@inheritDoc}
 */
@Override
public void setAdapter(ListAdapter adapter) {
    if (adapter != null) {
        mAdapterHasStableIds = mAdapter.hasStableIds();
        if (mChoiceMode != CHOICE_MODE_NONE && mAdapterHasStableIds &&
                mCheckedIdStates == null) {
            mCheckedIdStates = new LongSparseArray<Integer>();
        }
    }

    if (mCheckStates != null) {
        mCheckStates.clear();
    }

    if (mCheckedIdStates != null) {
        mCheckedIdStates.clear();
    }
}
/**
*{@inheritardoc}
*/
@凌驾
public void setAdapter(ListAdapter适配器){
if(适配器!=null){
madapterHassTableId=mAdapter.hassTableId();
if(mChoiceMode!=CHOICE\u MODE\u NONE&&mAdapterHasStableIds&&
mCheckedIdStates==null){
mCheckedIdStates=new LongSparseArray();
}
}
if(mCheckStates!=null){
mCheckStates.clear();
}
if(mCheckedIdStates!=null){
mCheckedIdStates.clear();
}
}

为什么这个方法根本不使用适配器?有趣的是,我的“错误”是,AblistView试图调用空的mAdapter。他们忘记在这个类中设置适配器了吗?这不可能是真的,因为这么多人都会看到这一点,我在stackoverflow上找不到任何关于这一错误的信息。
AbsListView
不是直接使用的,而是通过一个子类,如
ListView
GridView

setAdapter()
的子类实现设置
mAdapter
,然后才调用
super.setAdapter()

作为参考,这里有一个例子。您可以看到它如何与
AbsListView
一起工作


因此,在这方面,它不是童车,但可以说闻起来有点滑稽。

非常感谢。。。没错,子类设置了适配器。但基本上,如果你从这个类扩展,你不设置这个值,你会遇到一个问题。。。不是最干净的代码;)