【发布时间】:2014-02-03 08:36:57
【问题描述】:
我有一个由 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 的位置,看起来像是被按下了。
我还尝试在拖动事件中取消注册和重新注册上下文菜单..也没有工作。菜单不断出现
有没有更有效的方法来阻止上下文菜单出现并阻止列表项出现被选中??
【问题讨论】:
标签: android contextmenu block