Handler - com parâmetros atualizando uma view |
Top Previous Next |
|
Tela
ExemploBaseSoma.java
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 <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
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> |