Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 15/06/13, 19:20:05
Array

[xs_avatar]
DiecTraca DiecTraca no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2013
Mensajes: 4

diferenciar boton pulsado en ContextMenu

Hola soy nuevo en Android, y me encuentro con un problema que no logro solucionar, igual es una cosa sencilla. He buscado solucion, y la que he encontrado coincide con esta, pero a mi no me funciona, supongo que me habre dejado algo, a ver si alguien me puede ayudar.

Lo que quiero hacer es poder diferenciar cual a sido el boton que ha activado el contextMenu, para asi realizar la accion del contextMenu sobre el objeto que representa ese boton.

Este es el codigo que he realizado.

Código:
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends Activity {
	
	char btn = '0';
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		// contextMenu for Button 1
		Button bt1 = (Button)findViewById(R.id.button1);
		registerForContextMenu(bt1);
		
		// contextMenu for Button 2
	    Button bt2 = (Button)findViewById(R.id.button2);
		registerForContextMenu(bt2);
	
	}

	@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
		
		// Which button I pushed?
		if (v == bt1) {
			setBtn ('1');
		}	else if (v == bt2)  {
			setBtn ('2');
		}
		
		// ContextMenu Title
		menu.setHeaderTitle(R.string.selectOption);        
        
		// Create ContextMenu
		MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu1, menu);
    }
	
	@Override
    public boolean onContextItemSelected(MenuItem item) {
		
		// TextView for see which button I pressed
		TextView lblMessage = (TextView) findViewById(R.id.lblMessage);
        
		// Switch for actions of ContextMenu selection
		switch (item.getItemId()) {
        case R.id.item1: 
        	
        				 // sound for test if I select Option 1
        				 test(null); 
        				 
        				 // Write which button I pushed
        				 lblMessage.setText("Nun Button = " + btn);
        break;
        case R.id.item2: ; 
        break;
        case R.id.item3: ; 
        break;                
        }
        return true;
    }    
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	public void pressCat(View v) {
		MediaPlayer mp = MediaPlayer.create(this, R.raw.gato);
		mp.start();
	}

	public void pressLion(View v) {
		MediaPlayer mp = MediaPlayer.create(this, R.raw.leon);
		mp.start();
	}
	
	public void test(View v) {
		MediaPlayer mp = MediaPlayer.create(this, R.raw.gato);
		mp.start();
	}

	
	public char getBtn() {
		return btn;
	}

	public void setBtn(char btn) {
		this.btn = btn;
	}
El error me lo da en esta parte:

Código:
// Which button I pushed?
		if (v == bt1) {
			setBtn ('1');
		}	else if (v == bt2)  {
			setBtn ('2');
		}
Si se lo quito va bien, pero no se que boton ha abierto el contextMenu.

Un saludo y gracias.
Responder Con Cita


  #2  
Viejo 15/06/13, 20:35:39
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
En principio para comparar objetos se usa el .equals();
Y luego haciendo una consulta rapida por internet he visto esto que creo que resuelve tu duda http://stackoverflow.com/questions/5...r-button-click el primero dice que al final uso dialogs porque lo veia mas apropiado, y el siguiente dice que lo implemento en el boton en vez de en el metodo de creacion del menu contextual.

Y en este resuelven tu duda http://stackoverflow.com/questions/6...a-context-menu

Casi hubieras terminado antes buscando que preguntando y esperando
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #3  
Viejo 15/06/13, 20:36:29
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
---- BORRAR ----

Post repetido

---- BORRAR ----
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #4  
Viejo 15/06/13, 22:11:32
Array

[xs_avatar]
DiecTraca DiecTraca no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2013
Mensajes: 4

Hola de nuevo,

gracias por responder,

de los dos enlaces que has puesto ninguno me resuelve mi problema, el segundo es el que he seguido para hacer mi programa, pero no me funciona, no se si me falta algo en el codigo, pero pienso que hago exactamente lo que dice ahi.

Y el otro, por lo que entiendo, trata de sacar distintos menus contextuales segun el boton que aprietes. Lo que yo busco es que saque siempre el mismo menu y realice la misma accion (en cada una de las opciones) pero sobre un objeto diferente, segun el boton que haya abierto el menu contextual.

Ejemplo, cada boton representa una foto y en el menu contextual esta retoque de ojos rojos, ajustar contraste y foco. Si eliges una de ellas quiero que la realice pero sobre la foto a la que representa el boton, por eso necesito saber que boton ha activado el menu.

Y donde esta el tema repetido?, he buscado, pero no lo encuentro en todo el foro.

Gracias.
Responder Con Cita
  #5  
Viejo 15/06/13, 23:14:07
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Supongo que el error que te da es al compilar porque los botones no están definidos como variables de clase...

Esto:

Button bt1 = (Button)findViewById(R.id.button1);

Tiene que ser, por un lado la definición de la variable:

Button bt1; //como variable de clase, fuera de los métodos

Y por el otro la asignación del valor (pero no vuelvas a poner Button delante o será una variable nueva)

bt1 = (Button)findViewById(R.id.button1); // En el onCreate como lo tienes

Comparar referencias con == es correcto, pues se comparan eso, referencias.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #6  
Viejo 15/06/13, 23:37:31
Array

[xs_avatar]
DiecTraca DiecTraca no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2013
Mensajes: 4

Gracias!!!

Eso era exactamente. Al definirla fuera del metodo ya ha funcionado. Pensaba que definiendola dentro de un "protected" se podia acceder desde dentro de la misma clase.

No soy muy amigo de las variables globales, pero el Java y los objetos no son lo mio, de momento. Espero ir avanzando.

Muchas gracias.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 03:59:21 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /