【问题标题】:Returning value from countdown timer从倒数计时器返回值
【发布时间】:2014-04-27 18:04:56
【问题描述】:

我需要从倒数计时器返回值,以便更新 textView。我不确定我该怎么做,我添加了一条评论,我尝试添加退货但没有运气。

public class BrewTimer extends Activity{

        public String secsRemain = "not set";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            System.out.println("Timer Created, we're in the onCreate Method.");
        }

        public void startBrewTimer(long remaningMillis) {
            // Start the Brew Timer
            System.out.println("Timer object fired!");

            new CountDownTimer(remaningMillis, 1000) {

                public void onTick(long millisUntilFinished) {
                    secsRemain = "seconds remaining: " + millisUntilFinished / 1000;
                    System.out.println(secsRemain);

                    return secsRemain; // <-- This is what I want to do
                }

                public void onFinish() {
                    System.out.println("Timer Finished!!!");
                }
            }.start();
        }

        public void stopBrewTimer() {
            //Stop the Brew Timer
        }

        }

【问题讨论】:

  • 因为返回类型是void, public void onTick(long millisUntilFinished) { 你不能return 任何东西。但请参阅 Raghunandan 的回答。

标签: java android return countdowntimer


【解决方案1】:

我需要从倒数计时器返回值,以便更新 文本视图。

没有必要这样做。它在ui线程上运行。您可以更新 onTick 本身的 textview。

例子:

public class MainActivity extends Activity { 
TextView tv;
  public String secsRemain = "not set";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView) findViewById(R.id.textView1);
    startBrewTimer(200000);     
}
private void startBrewTimer(long remaningMillis){
    CountDownTimer counter = CountDownTimer(remaningMillis, 1000){
        public void onTick(long millisUntilDone){
        secsRemain = "seconds remaining: " + millisUntilFinished / 1000; 
          tv.setText(secsRemain);                    
        }

        public void onFinish() {
            tv.setText("DONE!");

        }
    }.start();
}
 }

【讨论】:

  • 谢谢你,我把计时器放在它自己的类中,以为我可以创建一个对象以及它的各种方法。您描述的方式是使用倒数计时器的典型方式吗?我可以将倒数计时器代码放在 Activity 中并使用您提供的代码,它会工作,但认为将其作为对象或单例会更好地实现更多功能?
  • @Mint_Sauce 以上作品。你不需要单例。
【解决方案2】:

您可以通过广播接收器获取值......如下, 首先创建自己的IntentFilter

    Intent intentFilter=new IntentFilter();
    intentFilter.addAction("YOUR_INTENT_FILTER");

然后创建内部类BroadcastReceiver为,

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    /** Receives the broadcast that has been fired */
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction()=="YOUR_INTENT_FILTER"){
           //HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
           String receivedValue=intent.getStringExtra("KEY");
        }
    }
};

现在在onResume() 中注册您的广播接收器,

registerReceiver(broadcastReceiver, intentFilter);

最后在onDestroy()中注销BroadcastReceiver

unregisterReceiver(broadcastReceiver);

现在最重要的部分...您需要从需要发送值的任何地方触发广播...这样做,

Intent i=new Intent();
i.setAction("YOUR_INTENT_FILTER");
i.putExtra("KEY", "YOUR_VALUE");
sendBroadcast(i);

如果你觉得这个答案令人满意,别忘了接受我的回答......干杯:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多