我在用

<Chronometer android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/chrono"
        android:visibility="gone" />


在我的一个活动中,我的问题是我可以将其所有活动都设置为全局活动,以便可以在Android应用程序中将其显示给每个活动吗?

如果是,那么该怎么做,请举个例子,因为我是android新手?

这是我的计时器代码

Chronometer stopWatch;

        stopWatch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer arg0) {
                countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                long min = countUp / 60;
                long sec = countUp % 60;
                String minStr = "";
                String secStr="";

                if(min < 10)
                {
                    minStr = "0"+min;
                }
                else
                {
                    minStr = ""+min;
                }
                if(sec<10)
                {
                    secStr = "0"+sec;
                }
                else
                {
                    secStr = ""+sec;
                }

                // String asText = (countUp / 60) + ":" + (countUp % 60);
                String asText = minStr + ":" + secStr;
                textGoesHere.setText(asText);
            }
        });
        stopWatch.start();

最佳答案

这是一个主意。为您的Chronometer<include />创建一个单独的布局,并在所有需要计时码表的布局中。

现在,您可以使用Singleton模式或SharedPreferences来存储属性,例如计时器的开始时间,当前状态(已暂停,正在运行,已停止,重置)。每当您开始新的活动时,请获取计时器的状态并将其显示在计时器上。

例如,如果当前状态正在运行,则您可能必须启动一个线程来更新计时器,或者如果计时器已停止,则只需从您的SharedPreferenceSingleton类获取开始时间和停止时间并在其上显示计时器。

例如,请考虑以下情形。为了简单起见,我们有两个活动,ActivityA和ActivityB。

现在这是您的计时器的某些状态,您的状态可能会有所不同。


准备就绪(00:00-您的计时器已准备好运行)
正在运行(计时器正在运行)
已暂停(计时器已暂停,可以恢复)
已停止(您已停止计时器,并显示经过的时间,下一个可能的状态为1,即就绪。)


您将需要其他几个参数,例如,


计时器开始时间(System.currentTimeInMillis()减去此时间将使您过去)
计时器停止时间(用于计算计时器的暂停和停止时间)


让我们考虑这种情况。您正在从ActivityA启动计时器,并希望保留ActivityB上的状态。这是您可能想要做的事情。

当您通过任何事件启动计时器时(例如单击按钮),必须将开始时间保存在SharedPreference中。

现在,您要导航到ActivityB,然后必须将计时器状态保存到ActivityA的SharedPreference方法中的onStop()中。

现在,在启动ActivityB之后,在onResume()方法中从SharedPreference获取开始时间,System.currentTimeInMillis()减去开始时间将为您提供经过的时间。接下来,您必须从SharedPreference获取计时器状态。

如果状态正在运行,则必须启动线程来更新计时器。如果计时器已停止,则足以显示计时器所经过的时间。

这是解决方案的概述。您可以从here了解有关SharedPreferences的信息。

另外,您需要熟悉“活动”生命周期,您可以从here中学习。

10-07 13:39
查看更多