AblistView.java中的SetAdapter-有问题,还是我缺少什么?
我最近在我的ListView中得到了一个nullpointer异常(调用showContextMenuForChild),它是从AbsListView扩展而来的。我在我的网站上找不到错误,所以我查看了AbsListView的源代码,以找到这背后的原因 方法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
/**
* {@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
一起工作
因此,在这方面,它不是童车,但可以说闻起来有点滑稽。非常感谢。。。没错,子类设置了适配器。但基本上,如果你从这个类扩展,你不设置这个值,你会遇到一个问题。。。不是最干净的代码;)