我创建了一个片段,可以在4 Activities
的顶部看到,我在片段中创建了一个Countdown Timer
,它工作正常。
问题是,在每个活动上,计时器刷新,并且从00:03:00
开始,我为3 Minutes
创建了计时器,我希望它在所有活动中显示相同的时间,而不是在每个活动上刷新自己。
这是我的密码。
public class myCartFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.cart_header_fragment, container, false);
tvTimer= (TextView) view.findViewById(R.id.tvTimer);
CountDownTimer countDownTimer= new CounterClass(180000, 1000);
countDownTimer.start();
}
public class CounterClass extends CountDownTimer{
@Override
public void onTick(long millisUntilFinished) {
long millis= millisUntilFinished;
String hms= String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
tvTimer.setText(hms);
}
}
通过在布局xml文件中使用以下代码,我正在活动中使用此片段
<fragment
android:id="@+id/calendarFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="fragments.myCartFragment"
tools:layout="@layout/header_fragment" />
</LinearLayout>
最佳答案
在所有活动/片段中使用反类的单个实例
使用静态方法初始化getInstance
并检索值getFormatedTime()
。
public class CounterClass extends CountDownTimer{
private static String hms;
private static CounterClass instance;
private CounterClass(long millisInFuture, long countDownInterval){
super(millisInFuture,countDownInterval);
}
public static CounterClass initInstance(long millisInFuture, long countDownInterval){
if(instance==null){
instance = new CounterClass(millisInFuture,countDownInterval);
}
return instance;
}
public static CounterClass getInstance() throws Exception{
if(instance==null){
throw new Exception("Parameters not initialized. Initiate with initInstance");
}else{
return instance;
}
}
public static String getFormatedTime(){
return hms;
}
@Override
public void onTick(long l) {
long millis= l;
hms= String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
}
@Override
public void onFinish() {
}
}
我修改了密码。
要启动反诉程序,请执行以下操作。
CounterClass counterClass = CounterClass.initInstance(180000, 1000);
counterClass.start();
用于访问上一个值
try {
CounterClass counterClass = CounterClass.getInstance();
Log.i("TAG 222", counterClass.getFormatedTime());
} catch (Exception e) {
e.printStackTrace();
// counter class is not initiated , access initInstance
}
因为
android.os.CountDownTimer
没有默认构造函数,所以这是我们实现您的需求的方法