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); } }); 
Interesting Posts
Давайте будем гением компьютера.