Android 在ListView显示内容更改时管理ListView上下文菜单

Android 在ListView显示内容更改时管理ListView上下文菜单,android,android-listview,contextmenu,Android,Android Listview,Contextmenu,我有一个片段,其中我显示了一个listview,其中包含3项:a、B和C 我长按B键以显示上下文菜单。然后,一旦显示此菜单,后台进程将更新数据并从适配器中删除(游标适配器+notifydatasetchanged)。我的上下文菜单仍然显示。现在,我按下上下文菜单项,所选操作将应用于项目C(现在是列表中的第二个位置),它应该应用于项目B(当我打开上下文菜单时是第二个位置,但现在是第一个位置)。 这在Android2.x中运行良好,但在Android4.1-4.4中失败 知道为什么吗 请在下面找到我

我有一个片段,其中我显示了一个listview,其中包含3项:a、B和C 我长按B键以显示上下文菜单。然后,一旦显示此菜单,后台进程将更新数据并从适配器中删除(游标适配器+notifydatasetchanged)。我的上下文菜单仍然显示。现在,我按下上下文菜单项,所选操作将应用于项目C(现在是列表中的第二个位置),它应该应用于项目B(当我打开上下文菜单时是第二个位置,但现在是第一个位置)。 这在Android2.x中运行良好,但在Android4.1-4.4中失败

知道为什么吗

请在下面找到我的代码

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
            final MenuInflater inflater = this.getActivity().getMenuInflater();
            inflater.inflate(R.menu.contextual_menu, menu);

            // don't forget to set the title !
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
            ViewHolder viewHolder = (ViewHolder) info.targetView.getTag();

...
}

    public boolean onContextItemSelected(MenuItem item) {
        super.onContextItemSelected(item);

        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        ViewHolder viewHolder = (ViewHolder) info.targetView.getTag();
        int menuItemIndex = item.getItemId();

        switch (menuItemIndex) {
        case R.id.entry1 :
            process(viewHolder);
            break;
        }

...
}

使用AdapterContextMenuInfo的
public long id
,它可能是相同的。您的确切意思是什么?我需要检索与onCreateContextMenuviewHolder中提取的相同的viewHolder?你为什么需要它?它们只是为了提高ListView的性能(这一点非常值得怀疑,请参阅),直到recyclingViews出现时,它们才是性能所必需的。但我用它来储存我的物品。我不明白你的建议是什么来帮助我解决我的问题如果你有一个id,你可以在你的适配器中查找你的数据,视图持有者并不意味着充当你的数据模型