У меня есть сортируемый ListView с TouchInterceptor от GoogleMusic, чтобы изменить порядок элементов списка при перетаскивании. У меня также есть ContextMenu, зарегистрированный для этого ListView. Проблема в том, что перетаскивание элемента для изменения его позиции считается длительным нажатием системы, и контекстное меню появляется, когда оно не должно. Моя первая мысль была иметь логическую переменную значение ИСТИНА, если onDrag() вызывается и ложным, когда сопротивление прекращается, и установите onCreateContextMenu так:android - контекстное меню блока от
@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]);
}
}
}
Это не работает так хорошо, поэтому я перетаскивание = false через секунду после перетаскивания с помощью handler.postDelayed(). Это работает нормально по большей части, но оставляет позицию ListView, с которой началось перетаскивание, похожее на нажатие.
Я также попытался отменить регистрацию и перерегистрацию для контекстного меню при перетаскивании событий .. также не работал. появилось меню
Есть ли более эффективный способ блокировки контекстного меню и появление элемента списка из выбранного?
это будет по-прежнему показывать меню ... это будет просто пустым – Anonymous