obtener posicion de elemento seleccionado de un listview al seleccionar opcion en ContextMenu

4,608 views
Skip to first unread message

aaRon

unread,
Jan 7, 2012, 6:56:00 AM1/7/12
to desarrollad...@googlegroups.com
Hola amigo, comento mi problema. Tengo una lista de elementos que al seleccionarlos con una pulsación larga muestra un menú contextual con 2 opciones. Mi problema viene ahora, ¿Como puedo obtener la posición o de que manera como puedo saber yo que elemento tengo que eliminar o modificar (son las 2 opciones del menú contextual) de la lista?

Espero vuestra ayuda.
Un saludo.

Julián Marqués

unread,
Jan 7, 2012, 7:03:17 AM1/7/12
to desarrollad...@googlegroups.com
Suponiendo que tienes un objeto Adaptador para el listview al que le pasas un List (yo lo hago normalmente así, no suelo usar los propios de android.

Tienes que usar un listener sobre el objeto ListView lstOpciones:


lstOpciones.setOnItemClickListener(new OnItemClickListener() {


@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int posicion,

long arg3) {

//En posicion tienes el indice con el que puedes acceder al objeto List que        le pasas al Adapter, ya solo tienes que acceder y tratarlo como te parezca. Creo que tb hay otro listener para pulsaciones largas pero ahora mismo no recuerdo como se llamaba. Si no lo encuentras vuelve a preguntar y lo busco :)

}

});



salu2.

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/mj0ZrMMQBTAJ.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.



--
Julián Fco Marqués García.

Julián Marqués

unread,
Jan 7, 2012, 7:06:37 AM1/7/12
to desarrollad...@googlegroups.com
Leyéndome veo que no me he explicado. Si te he entendido bien sacas el menú contextual con una pulsación larga sobre la lista. Para no complicarte, lo que yo haría sería sacar el menú contextual detectando la pulsación sobre un elemento de la lista, no sobre la lista completa usando el método que te puse obtienes el elemento pulsado. Si quieres que en vez de detectar la pulsación detecte la pulsación larga si no me equivoco en vez de setOnClickListener es setOnLongClickListener (no estoy seguro, usa autocompletar en eclipse y lo ves fácil.

garc...@gmail.com

unread,
Jan 7, 2012, 10:03:17 AM1/7/12
to desarrollad...@googlegroups.com
Hola Francisco!!
Enviado desde mi dispositivo movil BlackBerry® de Digitel.

From: aaRon <aaron...@gmail.com>
Date: Sat, 7 Jan 2012 03:56:00 -0800 (PST)
Subject: [desarrolladores-android.com] obtener posicion de elemento seleccionado de un listview al seleccionar opcion en ContextMenu

Hola amigo, comento mi problema. Tengo una lista de elementos que al seleccionarlos con una pulsación larga muestra un menú contextual con 2 opciones. Mi problema viene ahora, ¿Como puedo obtener la posición o de que manera como puedo saber yo que elemento tengo que eliminar o modificar (son las 2 opciones del menú contextual) de la lista?

Espero vuestra ayuda.
Un saludo.

--

manuel gomez

unread,
Jul 1, 2014, 9:29:30 AM7/1/14
to desarrollad...@googlegroups.com, garc...@gmail.com
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.


   
Reply all
Reply to author
Forward
0 new messages