Handler - com parâmetros atualizando uma view

Top  Previous  Next

Tela

 

ExemploBaseSoma.java

 
package com.randler;

 

import com.alarmes.R;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

 

public abstract class ExemploBaseSoma extends Activity implements OnClickListener {

 

 private Button button1;

 

 @Override

 public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);

         setContentView(R.layout.main);

         button1 = (Button) findViewById(R.id.button1);

         button1.setOnClickListener(this);

 }

 

 public void onClick(View arg0) {

 

         EditText n1 = (EditText) findViewById(R.id.edNumero1);

         EditText n2 = (EditText) findViewById(R.id.edNumero2);

 

         int i1 = Integer.parseInt(n1.getText().toString());

         int i2 = Integer.parseInt(n2.getText().toString());

         

         somar(i1, i2);

 }

 

 // método abstrato que as subclasses terão que implantar

 protected abstract void somar(int n1, int n2);

}
 

main.xml

 
<?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="vertical" >

 

  <TextView

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:text="Número 1"

      android:textAppearance="?android:attr/textAppearanceLarge" />

 

  <EditText

      android:id="@+id/edNumero1"

      android:layout_width="fill_parent"

      android:layout_height="wrap_content" >

 

      <requestFocus />

  </EditText>

 

  <TextView

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:text="Número 2"

      android:textAppearance="?android:attr/textAppearanceLarge" />

 

  <EditText

      android:id="@+id/edNumero2"

      android:layout_width="fill_parent"

      android:layout_height="wrap_content" />

 

  <Button

      android:id="@+id/button1"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:text="Calcular com Handler" />

 

  <TextView

      android:id="@+id/resultado"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:text="Resultado"

      android:textAppearance="?android:attr/textAppearanceLarge" />

 

</LinearLayout>

 

SomaComHandler.java

 
package com.randler;

 

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.TextView;

 

import com.alarmes.R;

 

public class SomaComHandler extends ExemploBaseSoma {

 

 protected static final int SOMAR = 1;

 

 @Override

 protected void somar(final int n1, final int n2) {

         new Thread() {

                 public void run() {

                         int soma = n1 + n2;

                         Bundle b = new Bundle();

                         b.putString("resultado", String.valueOf(soma));

                         Message msg = new Message();

                         msg.what = SOMAR;

                         // passa os valores para msg

                         msg.setData(b);

                         // envia msg para handler

                         handler.sendMessage(msg);

                 }

         }.start();

 }

 

 // classe interna usada para atualizar a view

 private Handler handler = new Handler() {

         @Override

         public void handleMessage(Message msg) {        

                 if (msg.what == SOMAR) {

                         

                         TextView t = (TextView) findViewById(R.id.resultado);

                         String soma = (String) msg.getData().getString("resultado");

                         t.setText(String.valueOf("Soma: " + soma));

                 }

         }

 };

}

 

Manifest

 

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

  package="com.alarmes"

  android:versionCode="1"

  android:versionName="1.0" >

 

  <uses-sdk android:minSdkVersion="7" />

 

  <application

      android:icon="@drawable/ic_launcher"

      android:label="@string/app_name" >

      <activity

          android:name="com.randler.SomaComHandler"

          android:label="@string/app_name" >

          <intent-filter>

              <action android:name="android.intent.action.MAIN" />

              <category android:name="android.intent.category.LAUNCHER" />

          </intent-filter>

      </activity>

  </application>

</manifest>