Создание меню после события с длинным кликом в режиме просмотра списка

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

До сих пор я пробовал использовать прослушиватель onItemLongClick и тост в нем, показывающий идентификатор длинного щелчка.

@Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { String res = Long.toString(id); Toast toast = Toast.makeText(this, res, Toast.LENGTH_SHORT); toast.show(); return true; } 

Solutions Collecting From Web of "Создание меню после события с длинным кликом в режиме просмотра списка"

Вместо использования onItemLongClick вы можете использовать

 public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) { ... } 

Где вы настраиваете параметры для редактирования и удаления или что вам нужно.

Действия для элемента, выбранного из контекстного меню, могут обрабатываться в

 public boolean onContextItemSelected(final MenuItem item) 

Для получения дополнительной информации о контекстном меню см. Здесь .

Для пошагового руководства посетите здесь .

Сначала вам необходимо зарегистрировать свое контекстное меню в режиме просмотра списка.

 lv = (ListView) findViewById(R.id.list_view); registerForContextMenu(lv); 

Затем просто переопределите методы активности.

 /** * MENU */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); if (v.getId()==R.id.list_view) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_list, menu); } } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch(item.getItemId()) { case R.id.add: // add stuff here return true; case R.id.edit: // edit stuff here return true; case R.id.delete: // remove stuff here return true; default: return super.onContextItemSelected(item); } } 

Вот пример файла menu_list.xml (вы должны поместить файл в папку res / menu).

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" android:title="@string/menu_add" /> <item android:id="@+id/edit" android:icon="@android:drawable/ic_menu_edit" android:title="@string/menu_edit" /> <item android:id="@+id/delete" android:icon="@android:drawable/my_icon_delete" android:title="@string/menu_delete" /> </menu> 

Надеюсь, это поможет.

Другой подход:

 //Deleted individual cart items //on list view cell long press cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() { @SuppressWarnings("rawtypes") public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) { final CharSequence[] items = { "Delete" }; AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Action:"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { cart = cartList.get(position); db.removeProductFromCart(context, cart); new AlertDialog.Builder(context) .setTitle(getString(R.string.success)) .setMessage(getString(R.string.item_removed)) .setPositiveButton("Done", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class); startActivity(intent); } }) .show(); } }); AlertDialog alert = builder.create(); alert.show(); //do your stuff here return false; } }); 

Вы можете вызвать Activity.openOptionsMenu() в методе элемента click.

Проверьте здесь
http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29

Использовать registerForContextMenu (); Для связи контекстного меню с любым предиктором просмотра.

Чтобы получить доступ к выбранным данным ListItem, просто используйте AdapterView.AdapterContextMenuInfo. Например:

 @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuinfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); long selectid = menuinfo.id; //_id from database in this case int selectpos = menuinfo.position; //position in the adapter switch (item.getItemId()) { case 1: doSomething(selectid); break; case 2: doSomethingElse(selectpos); } return super.onContextItemSelected(item); } 

**

После регистрации вашего контекстного меню в режиме просмотра списка

** override onCreateContextMenu Метод, подобный этому

 @Override public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){ if (v.getId() == R.id.listView){ AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)menuInfo; MenuItem mnu1=menu.add(0,0,0,"Delete"); MenuItem mnu2=menu.add(0,1,1,"Share"); } } 

Затем кодирование для каждого элемента, который можно выбрать

  @Override public boolean onContextItemSelected(MenuItem menuItem){ AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)menuItem.getMenuInfo(); switch (menuItem.getItemId()) { case 0: Toast.makeText(this, "Delete Selected", Toast.LENGTH_LONG).show(); break; case 1: Toast.makeText(this, "Share Selected", Toast.LENGTH_LONG).show(); break; default: break; } return true; }