我在用
<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
来存储属性,例如计时器的开始时间,当前状态(已暂停,正在运行,已停止,重置)。每当您开始新的活动时,请获取计时器的状态并将其显示在计时器上。
例如,如果当前状态正在运行,则您可能必须启动一个线程来更新计时器,或者如果计时器已停止,则只需从您的SharedPreference
或Singleton
类获取开始时间和停止时间并在其上显示计时器。
例如,请考虑以下情形。为了简单起见,我们有两个活动,ActivityA和ActivityB。
现在这是您的计时器的某些状态,您的状态可能会有所不同。
准备就绪(00:00-您的计时器已准备好运行)
正在运行(计时器正在运行)
已暂停(计时器已暂停,可以恢复)
已停止(您已停止计时器,并显示经过的时间,下一个可能的状态为1,即就绪。)
您将需要其他几个参数,例如,
计时器开始时间(System.currentTimeInMillis()
减去此时间将使您过去)
计时器停止时间(用于计算计时器的暂停和停止时间)
让我们考虑这种情况。您正在从ActivityA启动计时器,并希望保留ActivityB上的状态。这是您可能想要做的事情。
当您通过任何事件启动计时器时(例如单击按钮),必须将开始时间保存在SharedPreference
中。
现在,您要导航到ActivityB,然后必须将计时器状态保存到ActivityA的SharedPreference
方法中的onStop()
中。
现在,在启动ActivityB
之后,在onResume()
方法中从SharedPreference
获取开始时间,System.currentTimeInMillis()
减去开始时间将为您提供经过的时间。接下来,您必须从SharedPreference
获取计时器状态。
如果状态正在运行,则必须启动线程来更新计时器。如果计时器已停止,则足以显示计时器所经过的时间。
这是解决方案的概述。您可以从here了解有关SharedPreferences
的信息。
另外,您需要熟悉“活动”生命周期,您可以从here中学习。