Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 15/06/13, 19:20:05
Avatar de DiecTraca
DiecTraca DiecTraca no está en línea
Usuario novato en la web
Mensajes: 4
 
Fecha de registro: jun 2013
Mensajes: 4
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de set92
set92 set92 no está en línea
Miembro del foro
Mensajes: 468
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Responder Con Cita
  #3  
Viejo 15/06/13, 20:36:29
Avatar de set92
set92 set92 no está en línea
Miembro del foro
Mensajes: 468
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
---- BORRAR ----

Post repetido

---- BORRAR ----
Responder Con Cita
  #4  
Viejo 15/06/13, 22:11:32
Avatar de DiecTraca
DiecTraca DiecTraca no está en línea
Usuario novato en la web
Mensajes: 4
 
Fecha de registro: jun 2013
Mensajes: 4
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
Gracias de parte de:
  #6  
Viejo 15/06/13, 23:37:31
Avatar de DiecTraca
DiecTraca DiecTraca no está en línea
Usuario novato en la web
Mensajes: 4
 
Fecha de registro: jun 2013
Mensajes: 4
Mencionado: 0 comentarios
Tagged: 0 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 17:00:32 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007