|
||
|
|
|
|||||||
| 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
|
||||
|
||||
|
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;
}
Código:
// Which button I pushed?
if (v == bt1) {
setBtn ('1');
} else if (v == bt2) {
setBtn ('2');
}
Un saludo y gracias. |
|
|
|
#2
|
||||
|
||||
|
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
__________________
|
|
#3
|
||||
|
||||
|
---- BORRAR ----
Post repetido ---- BORRAR ----
__________________
|
|
#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. |
|
#5
|
||||
|
||||
|
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!
|
| Gracias de parte de: | ||
|
#6
|
||||
|
||||
|
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. |
![]() |
Estás aquí
|
||||||
|
||||||