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());
где-нибудь, но это также вызывает контекстное меню с длинным кликом (чего я не хочу делать).
- Пробовал
view.showContextMenu()
, но ничего не делает, если не добавить registerForContextMenu(getListView());
.
- Сначала пробовал сначала зарегистрировать щелкнутый элемент, а затем вызвать
showContextMenu()
, но ничего не сделал...
Кроме того, я хочу получить текст изображения с нажатым кликом +, чтобы я мог использовать их в контекстеMenu.
Цените помощь!
Ответы
Ответ 1
Решение:
@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
и т.д., Чтобы получить детали и использовать их действия (редактировать, удалять...).
Ответ 2
Мне удалось открыть контекстное меню при нажатии кнопки со следующим кодом:
public void onButtonClickEvent(View sender)
{
registerForContextMenu(sender);
openContextMenu(sender);
unregisterForContextMenu(sender);
}
Просто установите свойство onClick для кнопки onButtonClickEvent. Длинный клик не будет вызывать контекстное меню, так как он будет незарегистрирован сразу после его отображения.
Ответ 3
Относительно открытия контекстного меню по короткому клику:
Другие решения, размещенные здесь, не работали для меня, потому что я использовал ListFragment. Однако следующее решение, по-видимому, отлично работает как с ListFragment, так и с ListActivity (или просто с любым старым списком в целом):
public void onListItemClick(ListView l, View v, int position, long id){
l.showContextMenuForChild(v);
}
Это намного проще и элегантно. Фактически, это фактически то, как сам класс ListView инициирует контекстное меню по длинному клику.
Ответ 4
В моем случае у меня был 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);
}
});
Ответ 5
Я считаю, что если вы добавите к представлению OnLongClickListener, вы должны быть в состоянии предотвратить отображение контекстного меню на длинный клик.
В onItemClick параметр view
- это вид элемента, поэтому вы можете получить ImageViews или TextViews из этого:
view.findById(R.id.my_image_view);
Ответ 6
Мое решение:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
mListView.showContextMenuForChild(view);
}
});