Intereting Posts
Почему Android webview показывает «Далее» на клавиатуре, только если type = «number», а не с типом = «текст»? Получение названия улицы из объекта Address / Location в Android Использование контекста для запуска другой операции Почему, похоже, для этого синхронизированного блока требуется много времени, чтобы получить блокировку? Как получить ссылку на продукт в приложении под приложениями, указанными для учетной записи издателя? Android: автоматически выбирает debug / release Maps v2 api key? Панель навигации под панелью инструментов Как найти имя пакета, которое было удалено при использовании Intent.ACTION_PACKAGE_REMOVED Динамическое добавление просмотров в RelativeLayout внутри ScrollView Переопределение кнопки «Главная» – как мне избавиться от выбора? Как добавить один разделитель раздела для навигационного ящика в Android? Как отключить экран разблокировки программно Android 4.0: виджеты не появляются? Phonegap – navigator.app.backHistory () не работает с кнопкой HTML back Как получить покрытие кода с помощью Android Studio?

Android: как найти позицию, нажатую из контекстного меню

У меня есть список, заполненный данными. Я создал контекстное меню для списка, используя следующий код:

list.setOnCreateContextMenuListener ( new View.OnCreateContextMenuListener() { public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { AdapterContextMenuInfo mi =(AdapterContextMenuInfo) menuInfo; menu.add(0, 0, 0, "Delete item"); } } ); 

У меня есть следующий метод переопределения для управления контекстным меню:

 @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()) { case 0: ShowAlert("hello from delete item"); break; default: return super.onContextItemSelected(item); } return true; } 

В этом переопределенном методе, как я мог найти элемент списка, который был нажат?

Заранее спасибо. С наилучшими пожеланиями. Хосе

Solutions Collecting From Web of "Android: как найти позицию, нажатую из контекстного меню"

Вы можете использовать ContextMenu.ContextMenuInfo .

Что-то вроде того:

 @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); int index = info.position; } 

Вы также можете получить точный View для которого отображается меню:

 @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); int index = info.position; View view = info.targetView; } 
 private static final int EDIT_ID = Menu.FIRST + 3; private static final int DELETE_ID = Menu.FIRST + 4; @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut( 'e'); menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete") .setAlphabeticShortcut('d'); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); switch (item.getItemId()) { case EDIT_ID: edit(info.id); return (true); case DELETE_ID: delete(info.id); return (true); } return (super.onOptionsItemSelected(item)); } 

OK, чтобы решить проблему info null **** использовать статический член и установить значение из позиции вашего владельца, чтобы сохранить значение в элементе метода longclick, например: –

 public class CurrentPosition { public static int Pos{ get; set; } } public bool OnLongClick(View v) { CurrentPosition.Pos = Position; return false; } 

И используйте в своем контексте элемент:

 public override bool OnContextItemSelected(IMenuItem item) { switch (item.ItemId) { case 0: return true; case 1: Toast.MakeText(this,CurrentPosition.Pos.ToString(), ToastLength.Long).Show(); return true; case 2: Toast.MakeText(this, "Save", ToastLength.Long).Show(); return true; } return true; } } 

Код C #