Monday, July 4, 2011

Memanipulasi UI Dengan Thread/Timer di Android

Pada OS android, User Interface tidak bisa dimanipulasi secara langsung oleh Thread selain Thread utama. Jika itu dilakukan, maka akan keluar error "Only the original thread that created a view hierarchy can touch its views.". Solusinya kita bisa menggunakan class Handler agar User Interface dapat dimanipulasi oleh Thread turunan dari Thread utama. berikut contoh kodenya :



import java.util.Date;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;

public class LatihanActivity extends Activity implements Callback {
    private EditText text;
    
    private Handler handler = new Handler() {
     
     @Override
     public void handleMessage(Message msg) {
      text.setText((String) msg.obj);
     }
    };
 
 @Override
 public void updateText (String message) {
  Message msg = new Message();
  msg.obj = message;
  this.handler.sendMessage(msg);
 }
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.text = (EditText) findViewById(R.id.text);
        new TimeUpdater (LatihanActivity.this).start();
    }
}

class TimeUpdater extends Thread {
 
 private LatihanActivity activity;
 
 public TimeUpdater (LatihanActivity activity) {
  this.activity = activity;
 }
 
 public void run () {
  while (true) {
   activity.updateText(new Date().toString());
   try {
    sleep(1000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
}

interface Callback {
 public void updateText (String message);
}

Kode diatas adalah program untuk menampilkan tanggal dan waktu pada sebuah EditText. Thread TimeUpdater akan mengupdate EditText tersebut setiap 1 detik melalui method updateText() dimana method tersebut akan memanggil handler dan mengirimkan object Message pada method handleMessage().

Mohon maaf jika kode di atas masih kurang efisien karena saya juga masih dalam proses belajar, Selamat mencoba :)

3 comments:

  1. halo mas ikhsan,. habis liat postingan ini, saya jadi berpikir tentang penggunaan thread untuk menggeser sebuah item, misalnya menggeser textbox atau yg lainnya menggunakan thread,. kira" bisa atau tidak ya? hehe :)

    ReplyDelete
  2. Replies
    1. Wow iya kah? Bisakah mas share contohnya misalkan aja button bergerak dri atas ke bawah ntah kenapa saya jd penasaran XD
      Makasih mas :D

      Delete