gpt4 book ai didi

java - AbsListView.java 中的 SetAdapter - 有问题还是我遗漏了什么?

转载 作者:行者123 更新时间:2023-11-30 02:47:28 24 4
gpt4 key购买 nike

我最近在从 AbsListView 扩展的 ListView 中遇到空指针异常(调用 showContextMenuForChild)。我在我的网站上找不到错误,所以我查看了 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();
}
}

为什么这个方法根本不使用适配器?有趣的是,我的“错误”是 AbsListView 试图调用 null 的 mAdapter。他们是否忘记在此类中设置适配器?这不可能是真的,因为很多人都会看到这一点,而且我在 stackoverflow 上找不到任何关于这个错误的信息

最佳答案

AbsListView 不打算直接使用,而是通过 ListViewGridView 等子类使用。

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

作为引用,这里有一个 link to ListView.setAdapter() source .您可以看到它如何与 AbsListView 一起工作。

所以它在这方面没有问题,但可以说闻起来有点滑稽。

关于java - AbsListView.java 中的 SetAdapter - 有问题还是我遗漏了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com