Autore Topic: Thread e handler  (Letto 2020 volte)

Offline bomberdini

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
Thread e handler
« il: 23 Aprile 2012, 19:50:49 CEST »
0
salve a tutti. sto cercando di fare un programma abbastanza semplice, ma essendo alle prime armi con android trovo varie difficolta. Il programma dovrebbe al click di un bottone incrementare un contatore e mandare il valore in una text view il tutto utilizzando i thread.

Io ho scritto il seguente codice :

il main xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="horizontal" >


    <TextView
       android:id="@+id/textView1"
       android:layout_width="100dp"
       android:layout_height="wrap_content"
       android:text="" />

    <Button
       android:id="@+id/button1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Button" />

</LinearLayout>
e il codice java in cui cerco di fare il tutto è il seguente
Codice (Java): [Seleziona]
package com.th1.dini;



import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Thread1Activity extends Activity {
    /** Called when the activity is first created. */
        int contatore=0;
        TextView tv1;
        Button btn1;
        Handler handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                        tv1.setText("cont"+contatore);
                }
        };

       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv1 = (TextView) findViewById(R.id.textView1);
        btn1 = (Button) findViewById(R.id.button1);
       
        btn1.setOnClickListener(new View.OnClickListener() {
                       
                        @Override
                        public void onClick(View arg0) {
                                // TODO Auto-generated method stub
                           String valappo=(String) btn1.getText();
                           if(valappo.equals("stoppato"))
                                btn1.setText("premuto");
                           
                           else btn1.setText("stoppato");
                        }
                });
       
    }
    public void onStart() {
                super.onStart();
                 
//              bar.setProgress(0);
                Thread background = new Thread(new Runnable() {
                        public void run() {
                                try {
                                        String appo=(String) btn1.getText();
                                        while(appo.equals("premuto")) {
                                                Thread.sleep(1000);
                                                handler.sendMessage(handler.obtainMessage());
                                                contatore++;
                                               
                                        }
                                } catch (Throwable t) {
 
                                }
                        }
                });
               
                background.start();
        }
 
        public void onStop() {
                super.onStop();
                btn1.setText("stoppato");
        }
 
}

Il programma non mi da errori e parte tranquillamente in esecuzione solo che mi si cambia solo il valore del bottone quando clicco ma nella TextView non si scrive niente... Ringrazio tutti per l'aiuto e la pazienza :P

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Thread e handler
« Risposta #1 il: 23 Aprile 2012, 20:00:02 CEST »
+1
Il thread devi farlo partire nell'onClick del bottone, non nel'onStart

Offline bomberdini

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
Re:Thread e handler
« Risposta #2 il: 23 Aprile 2012, 20:05:08 CEST »
0
dici semplicemente spostando la riga background.start(); nell'on click?

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Thread e handler
« Risposta #3 il: 04 Maggio 2012, 09:37:40 CEST »
0
o meglio ancora, modifichi i bottone:

Codice (XML): [Seleziona]
 <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Button"
      android:onclick="onStart" />

e il metodo nell'activity sarà semplicemente:

Codice (Java): [Seleziona]
 public void onStart(View v) {
//quello che deve fare
}