2014-02-03 4 views
0

У меня есть сортируемый 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, с которой началось перетаскивание, похожее на нажатие.

Я также попытался отменить регистрацию и перерегистрацию для контекстного меню при перетаскивании событий .. также не работал. появилось меню

Есть ли более эффективный способ блокировки контекстного меню и появление элемента списка из выбранного?

ответ

0

Похоже, что переопределение метода onPrepareOptionsMenu может пригодиться вам.

я нашел упоминание об этом в следующем вопросе, который, кажется, похож на вас:

Android: How to enable/disable option menu item on button click?

+0

это будет по-прежнему показывать меню ... это будет просто пустым – Anonymous

Смежные вопросы