【问题标题】:Syncing progressBar with Handler将进度条与处理程序同步
【发布时间】:2018-07-21 16:46:58
【问题描述】:

如何将处理程序与进度条链接?

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


private val runnable = Runnable {
    start()
}

【问题讨论】:

  • 您的意思是使用处理程序更新进度条?
  • 是的@AndreaCioccarelli

标签: android kotlin


【解决方案1】:

还有一些其他的解决方案,但我更喜欢这个:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2018-06-08
    相关资源
    最近更新 更多