2014年12月4日 星期四

Android-利用 Message 將 Runnable 訊息藉由 Handler sendMessage 傳出

在上網載圖或資料時,是否有看過類似進度條或者進度百分比
是的,我們今天所要講的就是 : 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的參數

}



以下是程式範例 :

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+" %");

        }
    };
}

以下是XML :

<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>


























參考資料來源 : 連結
歡迎轉載,請註明來源。  


沒有留言:

張貼留言