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
  • Android - redirect на сохранение, если приложение не установлено (запуск с веб-сайта)
  • android: запуск фоновой задачи с помощью AlarmManager
  • Исключение: OutOfMemoryError
  • Невозможно получить информацию о подписке из API разработчика Google Play для Android
  • Как программно сделать снимок экрана?
  • Ввод плотности экрана в правильное ведро
  • java.lang.NoClassDefFoundError: javax.activation.DataHandler в android
  • Как вы включаете имя пользователя при хранении электронной почты и пароля с помощью Firebase (BaaS) в приложении для Android?
  • К сожалению, MyApp остановился. Как я могу это решить?
  • Добавление предварительно созданных файлов .so в проект с помощью плагина Android Gradle 0.7.3
  • Interesting Posts

    Excel Sum, исключающий дубликаты

    Xcode 8 Beta 4 Swift 3 – изменилось поведение «круглого»

    Страница X of Y

    Переадресация авторизации при истечении срока действия сеанса не работает при отправке формы JSF, страница остается той же

    Краткий пример регулярного выражения, преобразованного в конечный автомат?

    Spring 3.0 – Не удалось найти пространство имен SpringNamespaceHandler для пространства имен XML

    Windows 8 изменяет порядок загрузки

    Шаблон пользовательских пользовательских настроек Android

    (Контакт) не могут быть добавлены до тех пор, пока они не примут ваш запрос на контакт

    Как объявить отношения один к одному с использованием Entity Framework 4 Code First (POCO)

    Java OutOfMemoryError странное поведение

    Понимание передовых типов гнезд ZeroMQ

    Ключевые привязки и ключевые слушатели в Java

    Открыть реестр прямо на данный ключ?

    Существуют ли лучшие методы для организации пакетов (Java)?

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