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
arrelListView.setOnItemClickListener(new OnItemClickListener() { @Override final int pos, final long id) { Log.i(tag, "onItemClick"); Log.d(tag, "pos = " + pos + ", id = " + id); Intent inte = new Intent(LlistaActivitatsActivity.BAIXA_NIVELL); inte.putExtra("posicio", pos); sendBroadcast(inte); if (llistaDadesActivitats.get(pos).isProjecte()) { sendBroadcast(new Intent( LlistaActivitatsActivity.DONAM_FILLS)); Log.d(tag, "enviat intent DONAM_FILLS"); } else if (llistaDadesActivitats.get(pos).isTasca()) { startActivity(new Intent(LlistaActivitatsActivity.this, LlistaIntervalsActivity.class)); // en aquesta classe ja es demanara la llista de fills } else { // no pot ser! assert false : "activitat que no es projecte ni tasca"; } } });
Código Java:
Ver original
arrelListView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(final AdapterView<?> arg0, Log.i(tag, "onItemLongClick"); Log.d(tag, "pos = " + pos + ", id = " + id); if (llistaDadesActivitats.get(pos).isTasca()) { Intent inte; if (!llistaDadesActivitats.get(pos).isCronometreEngegat()) { inte = new Intent( LlistaActivitatsActivity.ENGEGA_CRONOMETRE); Log.d(tag, "enviat intent ENGEGA_CRONOMETRE de " + llistaDadesActivitats.get(pos).getNom()); } else { inte = new Intent( LlistaActivitatsActivity.PARA_CRONOMETRE); Log.d(tag, "enviat intent PARA_CRONOMETRE de " + llistaDadesActivitats.get(pos).getNom()); } inte.putExtra("posicio", pos); sendBroadcast(inte); } // si es un projecte, no fem res // Important : // Si retornem false, l'event long click es tornat a processar // pel listener de click "normal", fent que seguidament a // ordenar el cronometrat passem a veure la llista d'intervals. return true; } });
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
arrelListView.setOnItemClickListener(new OnItemClickListener() { @Override final int pos, final long id) { Log.i(tag, "onItemClick"); Log.d(tag, "pos = " + pos + ", id = " + id); Intent inte = new Intent(LlistaActivitatsActivity.BAIXA_NIVELL); inte.putExtra("posicio", pos); sendBroadcast(inte); if (llistaDadesActivitats.get(pos).isProjecte()) { sendBroadcast(new Intent( LlistaActivitatsActivity.DONAM_FILLS)); Log.d(tag, "enviat intent DONAM_FILLS"); } else if (llistaDadesActivitats.get(pos).isTasca()) { //DIALOG PER QUE SURTI PER PANTALLA builder.setTitle("Selecciona una opció?"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { Toast toast = Toast.makeText(getApplicationContext(), "Haz elegido la opcion: " + items[item] , Toast.LENGTH_SHORT); toast.show(); dialog.cancel(); if(seleccio=="Veure Intervals"){ startActivity(new Intent(LlistaActivitatsActivity.this, LlistaIntervalsActivity.class)); }else{ Intent inte = new Intent( LlistaActivitatsActivity.ENGEGA_CRONOMETRE); inte.putExtra("posicio", pos); sendBroadcast(inte); //AQUI ES DONDE ME PETA TODO LO DEMAS FUNCIONA } } }); AlertDialog alert = builder.create(); alert.show(); } } });
Haber si alguien me puede ayudar porque esto de los recivers se me va un poco de la mano.
Gracias