Fragment回调了onResume方法却并没有进去前台可见,所以不能仅仅依靠onResume判断是不是fragment是否可见
fragment有个方法专门判断fragment是否可见
/** * @return The current value of the user-visible hint on this fragment. * @see #setUserVisibleHint(boolean) */ public boolean getUserVisibleHint() { return mUserVisibleHint; }因此onResume可以这么写
@Override public void onResume() { super.onResume(); Log.v(TAG, "onResume"); if (!getUserVisibleHint()) { return; } ... }
如果确定可当前fragment前台可见,那么可以手动调用onResume
@Override public void setUserVisibleHint(boolean visible) { super.setUserVisibleHint(visible); Log.v(TAG, "setUserVisibleHint"); if (visible && isResumed()) { //Only manually call onResume if fragment is already visible //Otherwise allow natural fragment lifecycle to call onResume onResume(); } }