每秒可运行,在Fragment onCreateView()中只运行一次



我正在尝试用应该每秒运行一次的Runnable更新TextView中的时间。Runnable是从FragmentonCreateView()开始的,但它只执行一次。

有人能帮忙吗?

感谢

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以来的毫秒)。

最新更新