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)
在所有活动/片段中使用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
没有默认构造函数,因此这是我们可以满足您要求的方法
归档时间: |
|
查看次数: |
1819 次 |
最近记录: |