将progressBar与Handler同步 [英] Syncing progressBar with Handler

查看:110
本文介绍了将progressBar与Handler同步的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将处理程序与progressBar链接?

How can I link a handler with a progressBar?

fun start() {
    started = true
    handler.postDelayed(runnable, 13000)
}


private val runnable = Runnable {
    start()
}

推荐答案

还有其他解决方案,但我更喜欢:

There are some other solution but I prefer this:

final static int TH_MESSAGE_START = 0;
final static int TH_MESSAGE_PROGRESSION = 1;
final static int TH_MESSAGE_END = 2;

final ProgressBar mProgressBar = .....

final static Handler mHandler = new Handler(Looper.getMainLooper()) {
   @Override
   public void handleMessage(@NonNull final Message) {
      switch (message.what) {
         case TH_MESSAGE_START:
            mProgressBar.setProgress(0);
            break;
         case TH_MESSAGE_PROGRESSION:
            mProgressBar.setProgress(message.arg1);
            break;
         case TH_MESSAGE_END:
            mProgressBar.setProgress(mProgressBar.getMax());
            break;
      }
   }
};

private static boolean postToMainThread(final int what, final int arg1) {
   if (mHandler == null) return false;
   final Message cMessage = new Message();
   cMessage.what = what;
   cMessage.arg1 = arg1;
   return mHandler.sendMessage(cMessage);
}
private static boolean postToMainThread_progressBarStart() {
   return postToMainThread(TH_MESSAGE_START, 0);
}
private static boolean postToMainThread_progressBarProgress(final int progression) {
   return postToMainThread(TH_MESSAGE_PROGRESSION, progression);
}
private static postToMainThread_progressBarEnd() {
   return postToMainThread(TH_MESSAGE_END, 0);
}

然后,您可以从任何线程中调用这些postToMainThread_xxxx()方法来同步"mProgressBar".

Then from ANY THREAD you could call those postToMainThread_xxxx() methods to sync your "mProgressBar".

(我知道其中两个TH_MESSAGE没有用,但是用户可能想在开始和结束时做不同的事情)

这篇关于将progressBar与Handler同步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆