Hola a todos:
Si he entendido bien de lo que se trata es que con una pulsacion larga sobre un item de un listview, se produce este evento y muestra un menu contextual con opciones de por ejemplo: Editar / Borrar / Cancelar. Que puede tener un titulo con el nombre del item pulsado. Son varios pasos los que hay que hacer.
1.- referenciar el listview para el menucontextural registerForContextMenu(listpalabras);
2.- Desarrollar el codigo de dos metodos.
Pongo aqui mi codigo funciona bien. Hay que comprender las varialbes a que hacer referencia.
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
@SuppressWarnings("unchecked")
HashMap<String, String> itm = (HashMap<String, String>) listpalabras.getItemAtPosition(info.position);
switch(item.getItemId()) {
case R.id.editar: ShowDialogEditWord(Integer.parseInt(itm.get(PalabrasColumnas._ID)),
itm.get(PalabrasColumnas.TEXTE), itm.get(PalabrasColumnas.TEXTI));
return true;
case R.id.borrar: Toast.makeText(getActivity(), getString(R.string.app_name), Toast.LENGTH_LONG).show();
return true;
default: return super.onContextItemSelected(item);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
@SuppressWarnings("unchecked")
HashMap<String, String> item = (HashMap<String, String>) listpalabras.getItemAtPosition(info.position);
menu.setHeaderTitle("Palabra" + " " + item.get(PalabrasColumnas.TEXTE) + " " + item.get(PalabrasColumnas.TEXTI));
MenuInflater infl = getActivity() .getMenuInflater();
infl.inflate(R.menu.menuingles, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
public void ShowDialogEditWord(final int ID, String TextE, String TextI){
AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
LayoutInflater factory = LayoutInflater.from(this.getActivity());
final View vistaingles = factory.inflate(R.layout.modingles, null);
builder.setView(vistaingles);
EditText TEXTE = (EditText)vistaingles.findViewById(R.id.TextE);
EditText TEXTI = (EditText)vistaingles.findViewById(R.id.TextI);
TEXTE.setText(TextE);
TEXTI.setText(TextI);
builder.setTitle("Editar Palabra")
.setPositiveButton("Guardar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText TextE = (EditText) vistaingles.findViewById(R.id.TextE);
EditText TextI = (EditText) vistaingles.findViewById(R.id.TextI);
UpdatePalabra(ID, TextE.getText().toString(),TextI.getText().toString());
}})
.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}});
AlertDialog alert = builder.create();
alert.show();
}
Quiero recalcar que estos metodos forman parte de mi clase particular que extiends de Fragment.
Un saludo.