//在Basefragment private static final int RUNNER_MSG_CODE = 100; private long timeflag; private int recLen = 60; public static int FRAGMENTALL = 0; //1.取件 2.寄件 3.快遞員 4.管理員 public static int BOXALL = 0; //1爲寄件開箱子 2爲快遞員開箱子 protected int deep = 0; protected Toast toast = null; public BaseFragment() { } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fm = getFragmentManager(); System.out.println("" + fm); fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { if (BaseFragment.this.isVisible()) { startTimer(); } else { stopTimer(); } } }); } protected abstract void callbackTime(int time); public void backOnce() { getFragmentManager().popBackStackImmediate(); } public void backToAll() { for (int i = 0; i < getFragmentManager().getFragments().size() - 1; i++) { getFragmentManager().popBackStack(); } } public void start(SupportFragment toFragment) { start(toFragment, STANDARD); } protected int startTimer() { recLen = 60; callbackTime(recLen); mhandler.removeMessages(RUNNER_MSG_CODE); Message msg = Message.obtain(); msg.what = RUNNER_MSG_CODE; msg.obj = runnable; mhandler.sendMessageDelayed(msg, 1000); Log.e("startTimer", "startTimer"); return recLen; } private void stopTimer() { try { if (toast != null) { toast.cancel(); } } catch (Exception e) { } mhandler.removeMessages(RUNNER_MSG_CODE); recLen = -1; Log.e("stopTimer", "stopTimer"); } public void reStartTimer() { recLen = 60; } private Handler mhandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { if (msg.what == RUNNER_MSG_CODE) { this.post((Runnable) msg.obj); } } }; Runnable runnable = new Runnable() { @Override public void run() { recLen--; callbackTime(recLen); if (recLen == 0) { mhandler.removeMessages(RUNNER_MSG_CODE); // backOnce(); backToAll(); // Log.e("BaseFragment","BaseFragment=="+recLen); } else if (recLen > 0) { Message msg = Message.obtain(); msg.what = RUNNER_MSG_CODE; msg.obj = runnable; mhandler.sendMessageDelayed(msg, 1000); // Log.e("BaseFragment","BaseFragment=="+recLen); } else if (recLen < 0) { mhandler.removeMessages(RUNNER_MSG_CODE); // Log.e("BaseFragment","BaseFragment=="+recLen); } } }; }