是的,我們今天所要講的就是 : Message
藉由 Message 物件裡的所提供的方法,來達到我們想要知道的訊息
紅色字體是 Message 的用法
!!! 必須要新的 Message 才能只送出一筆,不然會造成 Exception
1 . 將參數放入容器內
Message message = new Message();
message.arg1 = i;
handler.sendMessage(message);
2 . 若handleMessage有接收到您發送的值
public void handleMessage(Message msg) {
//msg.arg1 = i; <---------您所Send的參數
 
}
以下是程式範例 :
紅色字體是 Message 的用法
!!! 必須要新的 Message 才能只送出一筆,不然會造成 Exception
1 . 將參數放入容器內
Message message = new Message();
message.arg1 = i;
handler.sendMessage(message);
2 . 若handleMessage有接收到您發送的值
public void handleMessage(Message msg) {
//msg.arg1 = i; <---------您所Send的參數
}
以下是程式範例 :
import java.util.concurrent.atomic.AtomicBoolean;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
    private ProgressBar bar;
    private TextView textView;
    AtomicBoolean isRunning=new AtomicBoolean(false);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bar = (ProgressBar)findViewById(R.id.progress);
        textView = (TextView) findViewById(R.id.textView1);
        bar.setProgress(0);
        Thread background=new Thread(new Runnable() {
            public void run() {
                try {
                    for (int i=0;i<20 && isRunning.get();i++) {
                        Thread.sleep(1000);
                        Message message = new Message();
                        message.arg1 = i;
                        handler.sendMessage(message);
                    }
                }catch (Throwable throwable) {
                }
            }
        });
        isRunning.set(true);
        background.start();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        isRunning.set(false);
    }
    Handler handler=new Handler() {
        @Override
        public void handleMessage(Message msg) {
            bar.incrementProgressBy(5);
            textView.setText(""+(msg.arg1==0 ? 1 : msg.arg1+1 )*5+" %");
        }
    };
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context="com.example.handlermessage.MainActivity" >
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:text="下載進度條" />
    <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="75" />
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp"
        android:text="0 %" />
</LinearLayout>

 
沒有留言:
張貼留言