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
Puede llamar a Activity.openOptionsMenu()
en su método de elemento de clic
Chequea aquí
http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29
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);
}