【问题标题】:ProgressBar countdown with Handlers in an Android applicationAndroid 应用程序中带有处理程序的 ProgressBar 倒计时
【发布时间】:2012-01-03 12:37:17
【问题描述】:

我首先想说的是,我经常使用 google 来找到一个进度条,该进度条会随着时间的流逝而自动填充。我在 threadAsynctask 中找到的所有结果。作为 Android 新手,我认为使用处理进度条更新的额外 Handler 更容易完成。

但是,我没有发现有人按照我的方式做。它可能违反Android规则吗?例如,我可以同时使用多个 Handlers 吗?

我的代码如下:

public void restarttimebar()
{
    stoptimebar();
    for(int i=1;i<12;i++)
    {
    Message msg = timebarhandler.obtainMessage(0,i,0);
    timebarhandler.sendMessageDelayed(msg, i*250);
    }

};

public void stoptimebar()
{
    timebarhandler.removeMessages(0);
    Message msg = timebarhandler.obtainMessage(0,0,0);
    timebarhandler.sendMessage(msg);
};

Handler timebarhandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        ProgressBar progressbar = (ProgressBar)findViewById(R.id.timebar);
        if (msg.arg1 == 0)
        {
            progressbar.setProgress(0);
        }
        if (msg.arg1 > 0)
        {
            progressbar.setProgress(msg.arg1*9);
        }
    }
};

现在可以调用restarttimebar(); (重新)启动进度条。它将以每 0.25 秒的增量填充超过 3 秒。任何评论都非常感谢!

编辑:还添加了一个 stoptimebar();只是停止进度条。此外,进度条的标准大小是 100。所以我只需将 12 次更新乘以 9。它几乎是 100 ;) 在我的应用程序中,进度条不必非常精确。

【问题讨论】:

  • 没有备注?我在真实设备(LG 2x Speed)和 Eclipse 模拟器中对其进行了测试,效果很好。然后我保持这种方式:) 可能对谷歌这类东西的人有用。 (7 小时前有些地方是晚上,所以他们可能还没有看到这个帖子:P)

标签: java android time progress-bar handler


【解决方案1】:

据我所知,您创建的线程和 Asynctasks(非 UI 线程)不应像进度条那样触及 UI 内容。如果您需要任务与进度条进行通信,请使用 Asynctask 并确保在 onPostExecute() 中完成与 UI 相关的操作。这个方法也会被主 UI 线程调用。

【讨论】:

    【解决方案2】:

    我想我更新进度条的方法可以被视为正确的。所以对于任何在谷歌上搜索并有相同问题的人:使用问题中的代码!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多