Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/01/2014, 12:35
Macas
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Error al cambiar long click por click

Muy buenas,
Estoy haciendo una pequeña aplicación para la uni el qual estoy modificando un poco, quiero cambiar lo que se hace en el metodo setOnItemLongClickListener por el metodo setOnItemClickListener lo que pasa que se me va un poco de las manos.

En el setOnItemLongClickListener lo que quiero hacer es que me muestre un dialogo con 2 opciones según la opción pues que haga una cosa o otra. El dialogo ya se me muestra, pero cuando le doy a la opción Engegar Tasca me peta.
Exactamente esto

.

El fallo creo que es algo del broadcast reciver pero no tengo mucho conocimiento de esto.

Os adjunto el codigo antiguo el qual funciona bien, es decir lo que hacia es con el Click lleva a otra actividad y con el longClick pongo un cornometro en marcha.
En vez de esto quiero que al hacer click me salga un dialog con 2 opciónes.

Este es el codigo por separado

Código Java:
Ver original
  1. arrelListView.setOnItemClickListener(new OnItemClickListener() {
  2.             @Override
  3.             public void onItemClick(final AdapterView<?> arg0, final View arg1,
  4.                     final int pos, final long id) {
  5.                
  6.                 Log.i(tag, "onItemClick");
  7.                 Log.d(tag, "pos = " + pos + ", id = " + id);
  8.  
  9.                 Intent inte = new Intent(LlistaActivitatsActivity.BAIXA_NIVELL);
  10.                 inte.putExtra("posicio", pos);
  11.                 sendBroadcast(inte);
  12.                 if (llistaDadesActivitats.get(pos).isProjecte()) {
  13.                     sendBroadcast(new Intent(
  14.                             LlistaActivitatsActivity.DONAM_FILLS));
  15.                     Log.d(tag, "enviat intent DONAM_FILLS");
  16.                 } else if (llistaDadesActivitats.get(pos).isTasca()) { 
  17.                     startActivity(new Intent(LlistaActivitatsActivity.this,
  18.                             LlistaIntervalsActivity.class));
  19.                     // en aquesta classe ja es demanara la llista de fills
  20.                 } else {
  21.                     // no pot ser!
  22.                     assert false : "activitat que no es projecte ni tasca";
  23.                 }
  24.            
  25.             }
  26.         });

Código Java:
Ver original
  1. arrelListView.setOnItemLongClickListener(new OnItemLongClickListener() {
  2.             @Override
  3.             public boolean onItemLongClick(final AdapterView<?> arg0,
  4.                     final View arg1, final int pos, final long id) {
  5.                
  6.                
  7.                 Log.i(tag, "onItemLongClick");
  8.                 Log.d(tag, "pos = " + pos + ", id = " + id);
  9.  
  10.                 if (llistaDadesActivitats.get(pos).isTasca()) {
  11.                     Intent inte;
  12.                     if (!llistaDadesActivitats.get(pos).isCronometreEngegat()) {
  13.                         inte = new Intent(
  14.                                 LlistaActivitatsActivity.ENGEGA_CRONOMETRE);
  15.                         Log.d(tag, "enviat intent ENGEGA_CRONOMETRE de "
  16.                                 + llistaDadesActivitats.get(pos).getNom());
  17.                     } else {
  18.                         inte = new Intent(
  19.                                 LlistaActivitatsActivity.PARA_CRONOMETRE);
  20.                         Log.d(tag, "enviat intent PARA_CRONOMETRE de "
  21.                                 + llistaDadesActivitats.get(pos).getNom());
  22.                     }
  23.                     inte.putExtra("posicio", pos);
  24.                     sendBroadcast(inte);
  25.                 }
  26.                 // si es un projecte, no fem res
  27.  
  28.                 // Important :
  29.              
  30.                 // Si retornem false, l'event long click es tornat a processar
  31.                 // pel listener de click "normal", fent que seguidament a
  32.                 // ordenar el cronometrat passem a veure la llista d'intervals.
  33.                 return true;
  34.             }
  35.         });

Este es el antiguo y veo que en el longclick se deveulve un true cosa que no pudeo hacer en el onClick.

Este es el codigo adaptado, el mensaje de error me sale en el ELSE de abajo del todo:

Código Java:
Ver original
  1. arrelListView.setOnItemClickListener(new OnItemClickListener() {
  2.             @Override
  3.             public void onItemClick(final AdapterView<?> arg0, final View arg1,
  4.                     final int pos, final long id) {
  5.                
  6.                
  7.                
  8.                 Log.i(tag, "onItemClick");
  9.                 Log.d(tag, "pos = " + pos + ", id = " + id);
  10.  
  11.                 Intent inte = new Intent(LlistaActivitatsActivity.BAIXA_NIVELL);
  12.                 inte.putExtra("posicio", pos);
  13.                 sendBroadcast(inte);
  14.                 if (llistaDadesActivitats.get(pos).isProjecte()) {
  15.                     sendBroadcast(new Intent(
  16.                             LlistaActivitatsActivity.DONAM_FILLS));
  17.                     Log.d(tag, "enviat intent DONAM_FILLS");
  18.                 } else if (llistaDadesActivitats.get(pos).isTasca()) {
  19.                    
  20.                    
  21.    
  22.                      
  23.                       //DIALOG PER QUE SURTI PER PANTALLA
  24.                    
  25.                     builder.setTitle("Selecciona una opció?");
  26.                     builder.setItems(items, new DialogInterface.OnClickListener() {
  27.                           @Override
  28.                         public void onClick(DialogInterface dialog, int item) {
  29.                             Toast toast = Toast.makeText(getApplicationContext(), "Haz elegido la opcion: " + items[item] , Toast.LENGTH_SHORT);
  30.                             toast.show();
  31.                             dialog.cancel();
  32.                             String seleccio = items[item].toString();
  33.                             if(seleccio=="Veure Intervals"){
  34.                                 startActivity(new Intent(LlistaActivitatsActivity.this,
  35.                                         LlistaIntervalsActivity.class));
  36.                             }else{
  37.                                 Intent inte = new Intent(
  38.                                          LlistaActivitatsActivity.ENGEGA_CRONOMETRE);
  39.                                         inte.putExtra("posicio", pos);
  40.                                        sendBroadcast(inte);
  41.                                   //AQUI ES DONDE ME PETA TODO LO DEMAS FUNCIONA
  42.                             }
  43.                          
  44.                         }
  45.                     });
  46.                
  47.                     AlertDialog alert = builder.create();
  48.                     alert.show();
  49.                    
  50.                 }
  51.            
  52.             }
  53.         });

Haber si alguien me puede ayudar porque esto de los recivers se me va un poco de la mano.

Gracias

Última edición por Macas; 18/01/2014 a las 14:34