我创建了一个片段,可以在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没有默认构造函数,所以这是我们实现您的需求的方法

07-24 09:49
查看更多