有时候在fragment的setUserVisibleHint方法中getActivity为null,出现这个问题的原因就是因为setUserVisibleHint并不属于Fragment生命周期的方法,该方法是Adapter在Fragment.onCreate前进行调用,因而还没有进行上下文的初始化,此时获取的Activity自然是null的。
有时候我们在处理Fragment业务逻辑初始化的时候可能会用到下面的方式
int mFirstRun = 0;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
if (mFirstRun == 0) {
mFirstRun++;
return;
}
// 业务代码
}
}
其实这种方式是不推荐的,正确的方法应该是这样:
viewPager.setCurrentItem(index);
然后再Fragment.onResume中getActivity().getCurrIndex();来判断用户是否切换到当前fragment,如果不是用户切换的话就无视。(ViewPager+Fragment用起来很别扭!!!)