Android:当ListView包含标题时,上下文菜单回调位置关闭1

Android:当ListView包含标题时,上下文菜单回调位置关闭1,android,listview,adapter,Android,Listview,Adapter,我有一个带有标题的ListView,使用ListView.addHeader(…) 除了尝试创建上下文菜单外,它似乎工作正常 当用户长按一行时,onCreateContextMenu回调中的位置似乎关闭了一个。当用户长按标题时,报告的位置是0(我不希望回调),当用户长按第一行时,报告的位置是1而不是0,依此类推 同样的代码在没有头的情况下也能正常工作 我知道,在我设置头的时候,Android只是在我的周围创建了一个新的适配器,但我认为在调用回调之前,他们会调整位置 我看到的是预期的行为吗?也许我

我有一个带有标题的ListView,使用
ListView.addHeader(…)
除了尝试创建上下文菜单外,它似乎工作正常

当用户长按一行时,
onCreateContextMenu
回调中的位置似乎关闭了一个。当用户长按标题时,报告的位置是0(我不希望回调),当用户长按第一行时,报告的位置是1而不是0,依此类推

同样的代码在没有头的情况下也能正常工作

我知道,在我设置头的时候,Android只是在我的周围创建了一个新的适配器,但我认为在调用回调之前,他们会调整位置

我看到的是预期的行为吗?也许我做错了什么

以下是我获取职位的方法:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    int position = info.position;

    // this is my workaround, but I'm afraid it's going to bite me in
    // the ass if/when GOOG fixes this
    if( this.hasHeader() && position > 0 ) position--;
我知道,在我设置头的时候,Android只是在我的周围创建了一个新的适配器,但我认为在调用回调之前,他们会调整位置

我对此表示怀疑。我还没有尝试过这种特定的行为,但我自己编写了包装适配器,这不是一个容易解决的问题

简单地说,上下文菜单内容根本不涉及
适配器
,只涉及
适配器视图
。因此,包装
适配器不可能使用菜单事件或调整位置值


我想您只需要减去
1
,然后自己忽略标题行。

谢谢。所以
AdapterView
传递视图的位置,但适配器实际上传递实际列表项的索引值,而不管是否设置了标题?我想我理解你的意思,但如果你知道任何解释设置标题如何影响AdapterContextMenuInfo对象中位置的文档,我的疑问就会消除。我的搜索并没有具体给出任何结果。@Psychik:“所以AdapterView传递视图的位置,但适配器实际上传递实际列表项的索引值,而不管是否设置了标题?”--
AdapterView
认为
位置将从
0
运行到
适配器为
getCount()
减去
1
返回的任何位置。时期它完全不知道那意味着什么<代码>列表视图
适配器
替换为不同的(包装)
适配器
。包装
Adapter
知道位置
0
是标题,并且
getCount()
必须通过
1
@psychik进行碰撞:“如果您知道任何说明设置标题如何影响AdapterContextMenuInfo对象中的位置的文档”——我怀疑除了源代码之外还有什么。欢迎您检查
AdapterView
ListView
,以及包装
Adapter
类(一些
ListView
IIRC的内部类,尽管我已经有一段时间没有检查该行为了)。