用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - android代码库

Android 进度条ProgressBar和消息传递Handler

2012-10-28 作者: 程序猿style举报

[android]代码库

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
 
/**
 * 进度条ProgressBar,消息传递Handler
 */
public class EX04_17 extends Activity {
    private TextView mTextView01;
    private Button mButton01;
    private ProgressBar mProgressBar01;
    public int intCounter = 0;
 
    /* 自定义Handler讯息代码,用以作为识别事件处理 */
    protected static final int GUI_STOP_NOTIFIER = 0x108;
    protected static final int GUI_THREADING_NOTIFIER = 0x109;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mButton01 = (Button) findViewById(R.id.myButton1);
        mTextView01 = (TextView) findViewById(R.id.myTextView1);
        mProgressBar01 = (ProgressBar) findViewById(R.id.myProgressBar1);
        mProgressBar01.setIndeterminate(false);
 
        mButton01.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mTextView01.setText(R.string.str_progress_start);
                /* 将隐藏的ProgressBar显示出来 */
                mProgressBar01.setVisibility(View.VISIBLE);
                /* 指定Progress为最多100 */
                mProgressBar01.setMax(100);
                /* 初始Progress为0 */
                mProgressBar01.setProgress(0);
                /* 起始一个线程 */
                new Thread(new Runnable() {
                    public void run() {
                        /* 预设0至9,共执行10次的循环叙述 */
                        for (int i = 0; i < 10; i++) {
                            try {
                                intCounter = (i + 1) * 20;
                                Thread.sleep(1000);
                                /* 当Thread执行5秒后显示执行结束 */
                                if (i == 4) {
                                    /* 以Message对象,传递参数给Handler */
                                    Message m = new Message();
                                    /* 以what属性指定User自定义 */
                                    m.what = EX04_17.GUI_STOP_NOTIFIER;
                                    EX04_17.this.myMessageHandler
                                            .sendMessage(m);
                                    break;
                                } else {
                                    Message m = new Message();
                                    m.what = EX04_17.GUI_THREADING_NOTIFIER;
                                    EX04_17.this.myMessageHandler
                                            .sendMessage(m);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
            }
        });
    }
 
    /* Handler建构之后,会聆听传来的讯息代码 */
    Handler myMessageHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            /* 当取得识别为 离开线程时所取得的讯息 */
            case EX04_17.GUI_STOP_NOTIFIER:
                /* 显示执行终了 */
                mTextView01.setText(R.string.str_progress_done);
                /* 设定ProgressBar Widget为隐藏 */
                mProgressBar01.setVisibility(View.GONE);
                Thread.currentThread().interrupt();
                break;
            /* 当取得识别为 持续在线程当中时所取得的讯息 */
            case EX04_17.GUI_THREADING_NOTIFIER:
                if (!Thread.currentThread().isInterrupted()) {
                    mProgressBar01.setProgress(intCounter);
                    /* 将显示进度显示于TextView当中 */
                    mTextView01
                            .setText(getResources().getText(
                                    R.string.str_progress_start)
                                    + "("
                                    + Integer.toString(intCounter)
                                    + "%)\n"
                                    + "Progress:"
                                    + Integer.toString(mProgressBar01
                                            .getProgress())
                                    + "\n"
                                    + "Indeterminate:"
                                    + Boolean.toString(mProgressBar01
                                            .isIndeterminate()));
                }
                break;
            }
            super.handleMessage(msg);
        }
    };
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...