从SecondActivity在MainActivity中接收字符串值,然后倒计时



在我的程序中,您为secondActivity中的倒计时计时器设置字符串值。然后,该值被发送到MainActivities文本视图,该文本视图应该在获取该值后立即开始倒计时。现在我已经制作好了,这样你就可以设置值,并且正确地获取值,但我不知道如何在收到值时开始倒数。我已经做了一个CounterClass。这是我的主要活动代码。。。

Bundle extras = getIntent().getExtras();
    String intentString;
    if(extras != null) {
        intentString = extras.getString("TimeValue");
        timer = new CounterClass(60000, 1000);
        timer.start();
        timeSent();
    } else {
        intentString = "Default String";
    }
    textTime= (TextView) findViewById(R.id.timeText);
    textTime.setText(intentString);

您需要启动计时器。始终阅读文档。

timer = new CounterClass(millisInFuture, countdownInterval);
timer.start();

编辑

millisInFuture---从调用start()到倒计时完成并调用onFinish()的未来毫秒数。

countDownInterval---接收onTick(长)回调的时间间隔。

2015年12月18日编辑

将intentString转换为millisInFuture并将其发送到CounterClass。然后用onTick()方法将其格式化回HH:MM。

String time = "16:54";
String split[] = time.split(":");
long futureInMillis = Integer.parseInt(split[0]) * 60 * 60 * 1000 + Integer.parseInt(split[1]) * 60 * 1000;

假设您真的想要实现自己的类。
我认为最好和干净的方法是通过接口。

首先创建一个接口类。
AddTimes.java

public interface AddTimes  {
      void writeTime(String time);
}

现在,在类中实现您的接口。

public class MainActivity extends AppCompatActivity implements AddTimes{

使用您的类TextView变量"textTime"

   timeText = (TextView)findViewById(R.id.timeText); //remove declaration TextView and use timeText instead of textTime . 

开始上课

new CounterClass(5000L,500L, this).start();

在CounterClass中,添加构造函数。

  AddTimes addTimes;
public CounterClass(long millisInFuture, long countDownInterval, AddTimes addTimes) {
    super(millisInFuture, countDownInterval);
    this.addTimes = addTimes;
}

替换textTime.setText(hms);添加Times.writeTime(hms);

最后。在你的主要活动中。实现AddTimes方法。

public void writeTime(String time) {
    timeText.setText("Time - " + time);
}

而不是这个

TextView timeText = (TextView)findViewById(R.id.timeText);
timeText.setText(intentString);

你需要这个

textTime= (TextView)findViewById(R.id.timeText);
textTime.setText(intentString);
timer = new CounterClass(10000, 1000);
timer.start();

正如您可能看到的,timeText已更改为textTime,这是一个类成员变量,您的CounterClass使用它。

将代码原样复制到MainActivity.java文件中
希望这能奏效。

public class MainActivity extends AppCompatActivity {
TextView textTime;
CountDownTimer timer;
int intValue = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bundle extras = getIntent().getExtras();
if(extras != null) {
    String intentString = extras.getString("TimeValue"); //if this is a plain number like 20, 45, 209, 8
    intValue = Integer.valueOf(intentString);
}
textTime= (TextView)findViewById(R.id.timeText);
timer = new CountDownTimer(intValue * 1000, 1000) {
public void onTick(long millisUntilFinished) {
    intValue--;
    textTime.setText("Count Down: " + intValue);
}
@Override
public void onFinish() {}
}
}
timer.start();
}

您可以简单地使用倒计时计时器:

  new CountDownTimer(30000, 1000) {
        public void onTick(long millisUntilFinished) {
            textField.setText("seconds remaining: " + millisUntilFinished / 1000);
           //here you can have your logic to set text to edittext
        }
        public void onFinish() {
            textField.setText("done!");
        }
    }.start();

最新更新