studio programacion móviles listas libro hacer evento desarrollo curso como aplicaciones android listview menu long-click

móviles - manual de programacion android pdf



crear un menú después de un evento de clic largo en una vista de lista (6)

**

después de registrar su menú contextual en la vista de lista

** reemplazar método onCreateContextMenu como este

@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"); } }

luego codificando para cada elemento que se puede seleccionar

@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; }

Tengo una vista de lista conectada a una base de datos, que muestra todas las entradas. Quiero que aparezca un menú si el usuario hace clic durante mucho tiempo en un elemento en la vista de lista (entrada de la base de datos), mostrando las opciones para editar o eliminar la entrada. Cómo puedo hacer esto.

Hasta ahora, he intentado utilizar un oyente onItemLongClick y un brindis en el que muestra el ID de la vista hace mucho tiempo.

@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; }


En lugar de usar onItemLongClick puede usar

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

donde configura las opciones para editar y eliminar o lo que sea necesario.

Las acciones para el elemento seleccionado del menú contextual pueden procesarse en

public boolean onContextItemSelected(final MenuItem item)

Para obtener más información sobre el menú contextual, consulte here .

Para una visita tutorial paso a paso here .


Otro enfoque:

//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; } });


Primero necesita registrar su menú contextual en la vista de lista.

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

Luego, simplemente anule los métodos de actividad.

/** * 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); } }

Aquí hay un ejemplo de archivo menu_list.xml (debe colocar el archivo en la carpeta 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>

Espero que ayude



Use registerForContextMenu (); para vincular el menú contextual a cualquier sucesor de vista.

Para acceder a los datos ListItem seleccionados, simple use AdapterView.AdapterContextMenuInfo. P.ej:

@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); }