Android open ContextMenu на коротком клике + элемент с кликом

lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { TextView text = (TextView) view.findViewById(R.id.btitle); registerForContextMenu(text); view.showContextMenu(); } }); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); TextView text = (TextView) v.findViewById(R.id.btitle); CharSequence itemTitle = text.getText(); menu.setHeaderTitle(itemTitle); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); } 

Здравствуйте,

Я пытаюсь открыть contextMenu при нажатии на короткий элемент. Мне удалось это сделать, только если я добавлю registerForContextMenu(getListView()); где-то, но это также запускает contextMenu на длинный клик (чего я не хочу делать).

  • Пробовал view.showContextMenu() но он ничего не делает, если я не добавлю registerForContextMenu(getListView()); ,
  • Сначала пробовал зарегистрировать щелкнутый элемент, а затем вызвать showContextMenu() но ничего не сделал …

Кроме того, я хочу получить текст изображения с нажатой кнопкой мыши, чтобы я мог использовать их в контекстеMenu.

Цените помощь!

Мне удалось открыть контекстное меню при нажатии кнопки со следующим кодом:

 public void onButtonClickEvent(View sender) { registerForContextMenu(sender); openContextMenu(sender); unregisterForContextMenu(sender); } 

Просто установите свойство onClick для кнопки onButtonClickEvent. Длинный клик не вызывает контекстное меню, так как он отменяется без прав сразу после его отображения.

Что касается открытия контекстного меню по короткому клику:

Другие решения, размещенные здесь, не работали для меня, потому что я использовал ListFragment. Однако следующее решение, похоже, отлично работает как для ListFragment, так и для ListActivity (или просто для любого старого списка в целом):

 public void onListItemClick(ListView l, View v, int position, long id){ l.showContextMenuForChild(v); } 

Это намного проще и элегантно. Фактически, это фактически то, как сам class ListView инициирует контекстное меню по длинному клику.

Решение:

 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; long itemID = info.position; menu.setHeaderTitle("lior" + itemID); } 

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;

дает вам более подробную информацию об элементе списка. Затем вы можете использовать info.id, info.position и т. Д., Чтобы получить детали и использовать их действия (редактировать, удалять …).

В моем случае у меня был BaseAdapter и реализован щелчок по кнопке для каждого элемента listView (в методе getView):

 ImageButton menuBtn = (ImageButton) convertView.findViewById(R.id.itemListMenu); menuBtn.setOnClickListener(new android.view.View.OnClickListener() { public void onClick(View v) { parent.showContextMenuForChild(v); } }); 

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

В onItemClick параметр view является представлением элемента, поэтому вы можете получить ImageViews или TextViews из этого:

 view.findById(R.id.my_image_view); 

Мое решение:

  mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { mListView.showContextMenuForChild(view); } }); 
  • Android AlarmManager после перезагрузки
  • Элементы ListView не доступны для кликов. Зачем?
  • логика остановки слежения
  • Изменить фон ProgressDialog
  • Android Webview - веб-страница должна соответствовать экрану устройства
  • Android: как приостановить и возобновить таймер обратного отсчета?
  • Определить, было ли приложение загружено с Android Market
  • Как передавать данные между fragmentами
  • Возможно ли запустить одновременно несколько AsyncTask?
  • Должен ли вызов метода суперclassа быть первым утверждением?
  • Неподдерживаемая версия major.minor 52.0 в моем приложении
  • Interesting Posts

    Google Chrome – Новая вкладка – закладки – Как восстановить удаленные файлы?

    Автоматически регулировать громкость для аудиоразъема и встроенных динамиков?

    Как включить под-просмотр в шаблонах Blade?

    Сохранить окно сверху и украсть фокус в WinForms

    Карта – снижение производительности в MongoDb 2.2, 2.4 и 2.6

    Различные разрешения поддержки android

    Является ли процесс в реестре VHDL?

    Когда я использую точку, стрелку или двойную двоеточие, чтобы ссылаться на членов classа на C ++?

    Шрифты выглядят по-разному в Firefox и Chrome

    Есть ли способ свернуть все блоки кода в Eclipse?

    Пустые папки после восстановления файловой системы NTFS

    Как проверить, существует ли таблица в базе данных Android SQLite?

    Как восстановить разделы и данные после команды diskpart «clean»?

    Как присоединиться к двум спискам в Java?

    Каков правильный способ вернуть Итератор (или любой другой признак)?

    Давайте будем гением компьютера.