我正在尝试用应该每秒运行一次的Runnable
更新TextView
中的时间。Runnable
是从Fragment
的onCreateView()
开始的,但它只执行一次。
有人能帮忙吗?
感谢
public class MyFragment extends Fragment {
Calendar mCalendar;
private Runnable mTicker;
private Handler mHandler;
TextView mClock;
String mFormat;
private boolean mClockStopped = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.meteo_widget, container, false);
/*
* Clock (from DigitalClock widget source)
*/
mClock = (TextView) view.findViewById(R.id.clock);
mCalendar = Calendar.getInstance();
mHandler = new Handler();
mTicker = new Runnable() {
public void run() {
if(mClockStopped) return;
mCalendar.setTimeInMillis(System.currentTimeMillis());
mClock.setText(DateFormat.format("hh:mm:ss", mCalendar));
mClock.invalidate();
long now = SystemClock.uptimeMillis();
long next = now + (1000 - now % 1000);
mHandler.postAtTime(mTicker, next);
}
};
mTicker.run();
return view;
}
@Override
public void onResume()
{
super.onResume();
mClockStopped = true;
}
@Override
public void onPause()
{
mClockStopped = false;
super.onPause();
}
}
这是因为您通过设置mClockStopped=true来停止时钟;在onResume()中
删除此mTicker.run();
并创建Timer,然后使用此方法调用TimerTask,而不是Runnable,每1秒(1000ms)调度一次固定速率
你混淆了你的时代。。。Handler.postAtTime自启动以来花费毫秒(正常运行时间毫秒),而您提供的是Unix时间戳(自1970年1月1日00:00:00 UTC以来的毫秒)。