Autore Topic: Problema caricamento activity  (Letto 482 volte)

Offline ilthebest

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Problema caricamento activity
« il: 19 Marzo 2014, 11:48:59 CET »
0
Salve,

sto sviluppando un'app per un gioco di carte, in cui si gioca in 4 persone (1 umano e 3 cpu).
Ho realizzato un'activity che gestisce l'interfaccia grafica (visualizza le carte dell'umano e gestisce il click sulle carte) e una classe che gestisce le carte, la loro selezione e i punteggi.
Quindi nell'activity dell'UI eseguo un ciclo for (itero 40 volte come i turni dei giocatori) e ogni volta faccio giocare ad un giocatore una carta.
Il problema nasce dal fatto che quando tocca all'umano termina tutto il ciclo for prima che l'activity si sia caricata e l'utente possa cliccare sull'immagine della carta da giocare.
Avevo provato a impostare un boolean nell'activity e imporre un loop fino a che l'utente non abbia giocato, quando tocca a lui, ma l'activity si blocca senza crashare.

Come posso risolvere?
L'arte è un lavoro sporco, ma qualcuno lo deve pur fare!

CTRL + SHIFT + O: vi risolverà molti problemi!

Offline Noisemaker

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Problema caricamento activity
« Risposta #1 il: 07 Aprile 2014, 11:21:33 CEST »
+1
L'approccio che stai usando è abbastanza scorretto a mio avviso.
Un paio di consigli :)
1) non fare mai loop come quello che hai descritto tu nel thread principale, in quanto il programma si blocca li finchè la condizione non è soddisfatta (apparentemente corretto). Il problema è che il thread principale gestisce anche l'interfaccia utente, quindi se è fermo nel loop non può fare altro (mostrare elementi grafici, reagire ai tocchi, ecc...)
2) invece del ciclo for potresti fare una funzione che gestisca il fatto che tocca al giocatore successivo. Ogni volta che un giocatore ha fatto la sua mossa chiama questa funzione per passare il turno al prossimo giocatore.

I giocatori della CPU io li implementerei mediante thread separati (o anche AsyncTask) in modo che possano fare il loro calcoli senza bloccare l'interfaccia grafica e una volta che hanno deciso la mossa comunichi alcuni dati all'activity principale in modo che possa modificare l'interfaccia (es. mostrare la carta giocata ecc...).