Foros del Web » Programando para Internet » Android »

[SOLUCIONADO] (aprendiendo) en el videoTuto si funciona

Estas en el tema de (aprendiendo) en el videoTuto si funciona en el foro de Android en Foros del Web. Hola que tal comunidad, como están :D , resulta que me he decidido por aprender Android para poner a funcionar una pagina que he creado ...
  #1 (permalink)  
Antiguo 26/01/2015, 16:31
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
(aprendiendo) en el videoTuto si funciona

Hola que tal comunidad, como están :D , resulta que me he decidido por aprender Android para poner a funcionar una pagina que he creado en los android (que rudo XD ) el problema es que estoy con un vídeo tutorial donde vi una manera muy buena de escuchar un click de todos los botones. Pero el que yo tengo es similar y no me funciona, no hice el del vídeo tuto, solo saco las partes que me interesan y esa fue. Como dije antes tengo ya un sitio web y tengo bastante experiencia con javascript(NODE) y php por lo que ya desarrollar no se me hace tan difícil como cuando comencé a programar. Bueno después de tanta charla les muestro el código para que me muestren el error:
Código Java:
Ver original
  1. @Override
  2.     protected void onCreate(Bundle savedInstanceState) {
  3.         super.onCreate(savedInstanceState);
  4.         setContentView(R.layout.activity_calculadora);
  5.  
  6.  
  7.         int idList[]={R.id.btnAdd, R.id.btnDiv, R.id.btnMul, R.id.btnSub};
  8.         for (int id:idList){
  9.             View v=(View) findViewById(id);
  10.             v.setOnClickListener(btnClick);
  11.         }
  12.     }
  13.  
  14. private class  ButtonClickListeners implements View.OnClickListener{
  15.         public void onClick(View v){
  16.             result.setText("Hola amigos :D");//intente que me mostrara algo cuando le doy click a cualquier boton
  17.             switch (v.getId()){
  18.                 case R.id.btnAdd:
  19.                     Toast.makeText(getApplicationContext(), "Has oprimido algun boton", Toast.LENGTH_SHORT).show();
  20.                     break;
  21.             }
  22.         }
  23.     }

como ven ahi se guarda en un array(eso creo) todos los botones y en la función Onclick se captura el evento setOnClickListener como digo hasta ahora estoy comenzando. Puedo echarle la culpa a la versión de android que decidí escoger como mínima para funcionar pero no creo, además que el AndroidStudio no muestra ningún error por alguna parte.

Gracias chicos por la atención prestada
  #2 (permalink)  
Antiguo 27/01/2015, 06:58
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: (aprendiendo) en el videoTuto si funciona

es que por lo que veo no tenes definido en ningun lugar "btnClick".

Lo que tendrias que hacer es quitar la clase ButtonClickListeners

y poner esto:


Código Java:
Ver original
  1. private OnClickListener btnClick = new OnClickListener() {
  2.        
  3.     @Override
  4.     public void onClick(View v) {
  5.         // y aca pones todo lo que necesites hacer
  6.            
  7.     }
  8. };
  #3 (permalink)  
Antiguo 27/01/2015, 07:16
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: (aprendiendo) en el videoTuto si funciona

Haber, disculpa que arriba te puse el código directamente sin explicar absolutamente nada...en Java como en la mayoria de los lenguajes de programación tenes varias formas de hacer diferentes cosas logrando mismo resultados.

En este ejemplo puntual, vos podes definir el "listener" para un Button de varias formas. Las mas usadas y frecuentes de encontrar son:

1) Definis el listener en el button y pasas como argumento la interface OnClickListener

Código Java:
Ver original
  1. public class MainActivity extends Activity{
  2.  
  3.     private Button miBtn;
  4.  
  5.     @Override
  6.     protected void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.  
  9.         this.miBtn = (Button) this.findViewById(R.id.mi_btn);
  10.  
  11.         this.miBtn.setOnClickListener(new OnClickListener() {
  12.        
  13.         @Override
  14.         public void onClick(View v) {
  15.            
  16.         }
  17.     });
  18.     }
  19.  
  20. }


2) Implementas la interface OnClickListener directamente en la la clase. Ahora el argumento de setOnClickListener hace referencia a la clase que implementa la interface OnClickListener, y por otro lado debes implementar en la clase el metodo onClick

Código Java:
Ver original
  1. public class MainActivity extends Activity implements OnClickListener{
  2.  
  3.     private Button miBtn;
  4.  
  5.     @Override
  6.     protected void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.  
  9.         this.miBtn = (Button) this.findViewById(R.id.mi_btn);
  10.  
  11.         this.miBtn.setOnClickListener(this);
  12.     }
  13.  
  14.     @Override
  15.     public void onClick(View v) {
  16.  
  17.     }
  18.  
  19. }


3) Creas una variable de instancia del tipo OnClickListener que hará referencia a una nueva instancia de OnClickLister. Esta variable de instancia la pasas como argumento en el setOnClickListener.

Código Java:
Ver original
  1. public class MainActivity extends Activity{
  2.  
  3.     private Button miBtn;
  4.  
  5.     @Override
  6.     protected void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.  
  9.         this.miBtn = (Button) this.findViewById(R.id.mi_btn);
  10.  
  11.         this.miBtn.setOnClickListener(btnClick);
  12.     }
  13.  
  14.     private OnClickLister btnClick = new OnClickListener() {
  15.        
  16.     @Override
  17.     public void onClick(View v) {
  18.            
  19.     }
  20.     };
  21.  
  22. }
  #4 (permalink)  
Antiguo 27/01/2015, 09:20
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: (aprendiendo) en el videoTuto si funciona

la variable btnClick si esta definida, se me olvido ponerla, ya te pongo otra ves el codigo para que mires, También digo que el AndroidStudio no muestra ningún error. Ni el emulador tampoco, solo que no hace ninguna acción, Yo hice tal como tu me muestras ahí en tu segunda respuesta y si me funciona. Pero se me hace mas largo teniendo en cuenta que hay que hacer cuatro funciones, debido a que tengo cuatro botones, es una calculadora(suma, resta, divide, multiplica). Por eso esta forma, de guardar lo botones en un array se me hace mas funcional.
Código Java:
Ver original
  1. EditText num1, num2;
  2.     TextView result;
  3.     private ButtonClickListeners btnClick;//se declara
  4.  
  5.     @Override
  6.     protected void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         setContentView(R.layout.activity_calculadora);
  9.  
  10.  
  11.         int idList[]={R.id.btnAdd, R.id.btnDiv, R.id.btnMul, R.id.btnSub};
  12.         for (int id:idList){
  13.             View v=(View) findViewById(id);
  14.             v.setOnClickListener(btnClick);
  15.         }
  16.     }
  17.     public void operations(String opt){
  18.         num1=(EditText) findViewById(R.id.num1);
  19.         num2=(EditText) findViewById(R.id.num2);
  20.         result=(TextView) findViewById(R.id.result);
  21.         //Toast.makeText(getApplicationContext(), "Vamos a usar la operación "+opt, Toast.LENGTH_SHORT).show();
  22.         result.setText("Hola amigos :D");
  23.     }
  24.  
  25.     //new class ButtonClickListener
  26.     private class  ButtonClickListeners implements View.OnClickListener{
  27.         public void onClick(View v){
  28.             result.setText("Hola amigos :D");
  29.             switch (v.getId()){//captura todos id de  los botones
  30.                 case R.id.btnAdd:
  31.                     operations("+");
  32.                     break;
  33.                 case R.id.btnSub:
  34.                     operations("-");
  35.                     break;
  36.                 case R.id.btnDiv:
  37.                     operations("/");
  38.                     break;
  39.                 case R.id.btnMul:
  40.                     operations("*");
  41.                     break;
  42.             }
  43.         }
  44.     }

bueno ese es el codigo completo. Como ves ahi cuatro botones y todos se guardan en un array.

olle amigo otra cosa que no es tan complicada, como puedo hacer algo como console.log de javascript aca en java, ya que ahí una forma pero no se como usarla, siempre me sale error, es Log.v() pongo los parámetros pero sigue con el error, y con System no se bn. Pues estoy buscando todabia en google :D
  #5 (permalink)  
Antiguo 27/01/2015, 09:54
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: (aprendiendo) en el videoTuto si funciona

...haber...vamos por parte...

Tu error aca es el siguiente...

...linea 14: v.setOnClickListener(btnClick); ..mal, estas pasando una variable de instancia, pero que no hace referencia a ningun objeto...nunca has hecho una instancia de ButtonClickListeners..

...en la linea 14 deberia ir: v.setOnClickListener(new ButtonClickListeners()); y la variable de instancia btnClick la eliminas...
  #6 (permalink)  
Antiguo 27/01/2015, 09:59
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: (aprendiendo) en el videoTuto si funciona

...despues...

esto de acá...es terrible, no es View sino Button..y después creas un 4 variables con el mismo nombre y diferente valor...mi hijo de 6 años que ya esta programando en C, sabe que sucede si a 4 variables les doy el mismo nombre con diferente valor...imagino que vos también ya que según vos tenes bastante experiencia con javascript...esto es fatal, de novato programador


Código Java:
Ver original
  1. for (int id:idList){
  2.    View v=(View) findViewById(id);
  3.    v.setOnClickListener(btnClick);
  4. }
  #7 (permalink)  
Antiguo 27/01/2015, 10:03
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: (aprendiendo) en el videoTuto si funciona

...despues linea 28...mal...mismo problema que el punto anterior...VARIABLES...básico...ninguna ciencia...como podes utilizar el método setText() en la variable result, sino todavia no la has inicializado...???...si lo haces en el metodo "operations"...pero ante el evento click y siguiendo el flujo del programa, estas empleando el metodo setText() en la variable result antes de invocar a "operations", y por ende result no esta inicializada...mal, por ellooo...se debe inicializar las variables en oncreate y onresume, o inicializas cada variable de instancia cuando le definis.

Código Java:
Ver original
  1. result.setText("Hola amigos :D");


Conclusion: Te recomendaria que leas un poco mas de variables de instancia, variables de clase, variables locales, clases, clases anonimas, metodos, listeners y el lifecycle de los activity...

Un saludo

Última edición por ipraetoriux; 27/01/2015 a las 10:10
  #8 (permalink)  
Antiguo 27/01/2015, 12:12
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: (aprendiendo) en el videoTuto si funciona

ja ja aj ya con calma, olle tranquilo, te digo, lo veo en un vídeo tutorial en el cual si funciono, y si llevo bastante tiempo desarrollando con javascript. Tanto que vi en el vídeo tuto algo que yo hago comúnmente en javascript y es asignar un solo onCLick para varios botones, lo cual es lo que intento hacer.


aca yo lo hice con javascript

y aca esta el video How to create a Calculator App for Android - Peamon.com en minuto 12 mas o menos es donde el empieza a crear el array de los botones.

Pero ya viendo los comentarios, a algunos no les funciono, pero muestran la solucion solo que no la he logrado decifrar

"you need to instantiate your btnClick before you set the btnClick as a listener to v.
Ex. btnClick = new ButtonClickListener();

also I found that it works better if we make the ButtonClickListener public instead of private... it worked for me"
  #9 (permalink)  
Antiguo 27/01/2015, 12:28
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: (aprendiendo) en el videoTuto si funciona

je ej ej ya despues de tanto cuadrar donde poner lo que el chico decia sobre el error lo encontre :D

era solo esto amigo, si ves que no soy tan malo!!!!
Código Java:
Ver original
  1. for (int id:idList){
  2.        View v=(View) findViewById(id);
  3.      
  4.        btnClick=new ButtonClickListeners(); //esto era lo unico que faltaba :D
  5.        v.setOnClickListener(btnClick);
  6.     }
  #10 (permalink)  
Antiguo 27/01/2015, 17:22
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: (aprendiendo) en el videoTuto si funciona

Cita:
Iniciado por sonickseven Ver Mensaje
je ej ej ya despues de tanto cuadrar donde poner lo que el chico decia sobre el error lo encontre :D

era solo esto amigo, si ves que no soy tan malo!!!!
Código Java:
Ver original
  1. for (int id:idList){
  2.        View v=(View) findViewById(id);
  3.      
  4.        btnClick=new ButtonClickListeners(); //esto era lo unico que faltaba :D
  5.        v.setOnClickListener(btnClick);
  6.     }
Lo encontré dice....jajajajajaja

Yo te indique este error acá

Cita:
....haber...vamos por parte...

Tu error aca es el siguiente...

..linea 14: v.setOnClickListener(btnClick); ..mal, estas pasando una variable de instancia, pero que no hace referencia a ningun objeto...nunca has hecho una instancia de ButtonClickListeners..

...en la linea 14 deberia ir: v.setOnClickListener(new ButtonClickListeners()); y la variable de instancia btnClick la eliminas...

Etiquetas: activity, androi, app, list, view
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:20.