
Originariamente inviato da
pourquoipas
Ciao, si, il link è poco elegante (e porta ad un risultato un po' diverso da quello che mi pare serva a te) peraltro è vero che internet è una grandissima risorsa, per cui cercate molto con google, e se cercate informazioni inerenti la programmazione, rispolverate e cercate in inglese che si trova molta più roba e ringraziate i vostri vecchi professori delle medie
il tuo codice onClick, se è una funzione dell'activity ed invocata grazie ad android:onclick="onClick" viene eseguita nell'UI thread e quindi il programma viene aggiornato (graficamente) solo al termine della tua funzione e quindi quando hai fatto setText("2");
Per creare un timer o comunque eseguire del codice aggiornando man mani l'interfaccia in java devi creare un thread separato.
Alternativamente (per il solo problema del conuntdown timer) prova anche a guardare qui:
CountDownTimer | Android Developers
in bocca al lupo e ciao !
Tralasciando toni provocatori o messaggi senza attinenza con quanto mi occorre, ringrazio l'utente pourquoipas; lui sì, che ha capito al volo il mio problema e con toni professionali e corretti mi ha risposto in modo mirato.
Era esattamente quello che mi serviva, grazie infinite. Provato e riprovato, adattando alle mie esigenze. Avrei solo due dubbi, forse banali, per risolvere i quali ti posto alcuni frammenti di codice.
1) Dato il codice sotto, come posso fare in modo che la funzione cronometro parta alla pressione del pulsante e non al caricamento del pannello? Spostando in blocco il codice del cronometro sotto quello del pulsante non vedo messaggi di errori formali, ma l'app si blocca.
codice:
final TextView tvNome = (TextView) findViewById(R.id.textView2);
new CountDownTimer (30000, 1000) {
public void onTick(long millisUntilFinished) {
if (millisUntilFinished/1000 < 10){
tvNome.setText("seconds remaining: Ancora poco!");
}
else
{
tvNome.setText("seconds remaining: " + String.valueOf(millisUntilFinished));
}
}
public void onFinish() {
tvNome.setText("done!");
}
}.start();
final Button primo = (Button) findViewById(R.id.button1);
primo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Ecco, vorrei fare in modo che il cronometro parta con questo pulsante!
}
});
2) Ho capito che, affinché si realizzi il ciclo postato prima e che per comodità ti reinserisco sotto, la funzione va spostata sotto altra classe "altra.java" e va poi eventualmente richiamata nella classe della activity.java. Solo che ho qualche problema a "spiegare" alla classe "altra" che va modificata una casella di testo della activity. Come modificare il codice sotto, per fare in modo che modifichi la casella myCasella del pannello myActivity? Ho provato in diversi modi ma vedo sempre errore.
codice:
public void onClick(View v) {
int i = 0;
while (i < 100000){
//Ecco la riga incriminata!
//come richiamare un elemento che si trova in un'activity esterna?
tvNome.setText("1");
i++;
}
//Ecco la riga incriminata(2)!
//come richiamare un elemento che si trova in un'activity esterna?
tvNome.setText("2");
}
Grazie ancora!