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