Autore Topic: Come comunicare tra due activity diverse  (Letto 626 volte)

Offline cioppy

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • giancarlo985
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Play Store ID:
    Team Android
  • Sistema operativo:
    Linux Mint 12 - 64bit
Come comunicare tra due activity diverse
« il: 06 Maggio 2011, 16:36:08 CEST »
0
Ciao  a tutti.
Ho realizzato un'applicazione che gestisce la rotazione di una lancetta su di un'immagine.  In particolare ho creato un metodo setvelocità(int x) che mi permette di impostare la nuova velocità e di ruotare tale lancetta portandola alla nuova velocità.
Successivamente ho impostato tale applicazione come "isLibrary" e l'ho importata in un nuovo progetto.
Adesso riesco a visualizzare sia l'immagine che la lancetta nella nuova activity, ma non riesco a farla ruotare. O meglio non riesco a far comunicare l'activity principale con quella della libreria.
Come posso fare per far si che dall'applicazione principale riesco a gestire il movimento della lancetta ?
Grazie.

 

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Come comunicare tra due activity diverse
« Risposta #1 il: 06 Maggio 2011, 17:05:38 CEST »
0
Descritto a parole si comprendono le linee generali del tuo progetto, ma almeno per me è molto difficile immaginare eventuali errori di codice o di metodo.  :-P

Puoi postarci degli estratti dei punti salienti?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline cioppy

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • giancarlo985
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Play Store ID:
    Team Android
  • Sistema operativo:
    Linux Mint 12 - 64bit
Re:Come comunicare tra due activity diverse
« Risposta #2 il: 10 Maggio 2011, 12:42:39 CEST »
0
Hai ragione, cerco di spiegarmi meglio :-)
Ho una classe Tachimeter  in cui ho definito il costruttore, il metodo onDraw ed il metodo setVelocità() che imposta la nuova velocità e chiama la funzione invalidate che a sua volta richiama il metodo onDraw() .

Codice (Java): [Seleziona]
public class Tachimeter extends View
...
public Tachimeter(Context context, AttributeSet attrs) // costruttore
protected void onDraw(Canvas canvas) // metodo onDraw che disegna la view

public void setVelocità(int veloc) {
        velocità=veloc;
        Log.d("setvelocità", "la velocità è : "+ velocità);
        invalidate();
    }

Ho poi una classe TestTachimetro che estende Activity :
Codice (Java): [Seleziona]
public class TestTachimetro extends Activity {
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
        Button button= (Button) findViewById(R.id.button2);
        Tachimeter tachimeter = (Tachimeter) findViewById(R.id.customView);

@Override
    protected void onResume() {
        super.onResume();
       
    }
Il problema è che se io effettuo la chiamata al metodo setVelocità(int) all'interno di onResume() per esempio 10 volte per simulare il movimento, il metodo onDraw() viene chiamato solo alla fine di tutte le chiamate a setVelocità, poichè tutte le chiamate ad invalidate() vengono gestite all'interno di una coda, e tale coda è gestita in conclusione al thread principale. Come posso risolvere questo problema ????
Grazie.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Come comunicare tra due activity diverse
« Risposta #3 il: 10 Maggio 2011, 13:35:24 CEST »
0
Dimmi se ho capito bene: tu vuoi provare il Tachimetro per vedere se funziona, allora hai fatto un ciclo for dove richiamti dieci volte setVelocità e invalidate. Non mi pare corretto, ma del resto lo avevi già capito.

Per "provarlo" potresti fare un Timer che ogni due secondi (per esempio) richiama setvelocità e invalidate.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline cioppy

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +3
    • giancarlo985
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Play Store ID:
    Team Android
  • Sistema operativo:
    Linux Mint 12 - 64bit
Re:Come comunicare tra due activity diverse
« Risposta #4 il: 10 Maggio 2011, 15:06:49 CEST »
0
Il tachimetro funziona se io stabilisco una logica all'interno della classe tachimeter stessa. ad esempio se chiamo una funzione accelera, tutto funziona correttamente,
Codice (Java): [Seleziona]
accelera(){
while(getvelocità()==100){
setVelocità(getVelocità()+x);
SystemClock.sleep(1000); } // fine while
} // fine metodo accelera
 
ma io vorrei inviare dall'activity principale un insieme di "velocità" e ogni volta che setto una nuova velocità viene chiamata la funzione invalidate() che mi ridisegna la view.
Questo però non accade poichè la funzione invalidate() chiama il metodo onDraw() che ridisegna a view quando il mainthread termina le sue operazioni.