如何使倒数计时器在所有活动中显示相同的时间

dev*_*v90 4 android timer android-layout android-fragments

我创建了一个片段,该片段在的顶部可见4 Activities,我Countdown Timer在我的片段中创建了一个,它正常工作。

问题在于,在每个Activity计时器上刷新,并从开始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);
        }
}
Run Code Online (Sandbox Code Playgroud)

我通过在布局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>
Run Code Online (Sandbox Code Playgroud)

Sre*_*ari 5

在所有活动/片段中使用CounterClass的单​​个实例

使用静态方法初始化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() {

}
}
Run Code Online (Sandbox Code Playgroud)

我已经修改了代码。

为了启动CounterClass,请执行以下操作。

CounterClass counterClass = CounterClass.initInstance(180000, 1000);
counterClass.start();
Run Code Online (Sandbox Code Playgroud)

用于访问先前的值

try {
      CounterClass counterClass = CounterClass.getInstance();
      Log.i("TAG 222", counterClass.getFormatedTime());
     } catch (Exception e) {
       e.printStackTrace();
       // counter class is not initiated , access initInstance
     }
Run Code Online (Sandbox Code Playgroud)

由于android.os.CountDownTimer 没有默认构造函数,因此这是我们可以满足您要求的方法