GoogleMusic有一个带有TouchInterceptor的可排序ListView,可以在拖动时重新排序列表项。我还为此ListView注册了ContextMenu。问题是拖动项目以改变它的位置被系统视为长按,而不应该出现上下文菜单。我的第一个想法是,如果调用onDrag(),则将布尔变量设置为true;当拖动停止时,将布尔变量设置为false,并设置onCreateContextMenu,如下所示:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (v.getId()==R.id.listView1 && !drag) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
String title = data[info.position];
menu.setHeaderTitle(title);
String[] menuItems = getResources().getStringArray(R.array.actions_menu);
for (int i = 0; i<menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
}
}
这不能很好地工作所以我在拖动结束后使用handler.postDelayed()设置了drag = false一秒。这在大多数情况下都可以正常工作,但保留了拖动开始的ListView的位置,看起来就像是按下了它。
我还尝试在拖动事件中取消注册并重新注册上下文菜单..但是也没有用。菜单一直出现
是否有更有效的方法来阻止上下文菜单出现并阻止列表项出现???
答案 0 :(得分:0)
看起来覆盖onPrepareOptionsMenu方法可能对您有用。
我在以下与您类似的问题中发现了这一点:
Android: How to enable/disable option menu item on button click?