首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换按钮启动Timer1和Timer2,但只停止Timer1

切换按钮启动Timer1和Timer2,但只停止Timer1
EN

Stack Overflow用户
提问于 2015-11-09 20:20:41
回答 1查看 230关注 0票数 0

当单击"Start Timer“时,我试图说服Toggle按钮启动Timer1和Timer2,并且只停止Timer1离开Timer2继续使用”停止计时器“,我的主要活动如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    long init, now, paused, millis, seconds, minutes, hours;
    TextView display;
    TextView display2;
    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        handler = new Handler();
        display = (TextView) findViewById(R.id.chronometer1);
        final ToggleButton passTog = (ToggleButton) findViewById(R.id.toggleButton1);
        final Runnable updater = new Runnable() {
            @Override
            public void run() {
                if (passTog.isChecked()) {
                    now = System.currentTimeMillis();
                    millis = now - init;
                    seconds = ((millis / 1000) % 60);
                    minutes = (millis / 1000) / 60;
                    hours = (minutes / 3600000);
                    String hh = hours < 10 ? "0" + hours : hours + "";
                    String mm = minutes < 10 ? "0" + minutes : minutes + "";
                    String ss = seconds < 10 ? "0" + seconds : seconds + "";
                    display.setText(hh + ":" + mm + ":" + ss);
                    handler.postDelayed(this, 10);
                    continueTimer();
                }
            }
        };


        passTog.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                init = System.currentTimeMillis();
                handler.post(updater);
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        paused = System.currentTimeMillis();

    }

    @Override
    protected void onResume() {
        super.onResume();
        init += System.currentTimeMillis() - paused;

    }


    public void continueTimer() {
        display2 = (TextView) findViewById(R.id.chronometer2);
        now = System.currentTimeMillis();
        millis = now - init;
        seconds = ((millis / 1000) % 60);
        minutes = (millis / 1000) / 60;
        hours = (minutes / 3600000);
        String hh = hours < 10 ? "0" + hours : hours + "";
        String mm = minutes < 10 ? "0" + minutes : minutes + "";
        String ss = seconds < 10 ? "0" + seconds : seconds + "";
        display2.setText(hh + ":" + mm + ":" + ss);
    }

目标是何时点击“开始计时器”,两个计时器(chrononeter1和chronometer2)都应该启动,而切换“停止计时器”时,只有chronometer1应该停止。请指点!谢谢!

XML如下所示:

代码语言:javascript
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">

    <Chronometer
        android:id="@+id/chronometer1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="74dp"
        android:fontFamily="sans-serif-light"
        android:format="00:00:00"
        android:textSize="48sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/contraction_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Time since last start timer:" />

        <Chronometer
            android:id="@+id/chronometer2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif-light"
            android:format="00:00:00"
            android:textSize="12sp" />

    </LinearLayout>

    <ToggleButton
        android:id="@+id/toggleButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-medium"
        android:textOff="Start Timer"
        android:textOn="Stop Timer"

        />

</LinearLayout>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-19 05:48:25

好吧,看了一会儿你的代码。你可以用天文钟。比如:

代码语言:javascript
复制
//Decalare and initialize timer1.
private Chronometer timer1;
timer1 = (Chronometer)v.findViewById(R.id.chronometer1);

//Declare and initialize timer2.  
private Chronometer timer2;
timer2 =(Chronometer)v.findViewById(R.id.chronometer2);

然后在您的切换按钮中启动它们:

代码语言:javascript
复制
@Override
public void run() {
    if (passTog.isChecked()) {
        //start chronometers
        timer1.start();
        timer2.start();
    }

然后,当passTog.isChecked() = false时,只调用timer1.top()。第二次定时器将继续。

换句话说,当您的切换被选中时,对两个计时器调用.start(),当不检查切换时,只在一个计时器上调用.stop()。

我没看到“停止计时器”的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33617544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档