在实际项目中我们或有很多Fragment,而且会频繁切换。怎么能让他们切换完成同时达到刷新效果呢。
Activity中有onRestart方法那Fragment怎么办呢?
憋着急!看下面
//切换Fragment刷新 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { //当此fragment正当前显示是,执行该操作, //网络请求或者刷新数据 } else { // 相当于Fragment的onPause // System.out.println("ChatFragment ---setUserVisibleHint---isVisibleToUser - FALSE"); } }
预加载fragment时 不会执行setUserVisibleHint(boolean isVisibleToUser) 该方法,只有当切换到fragment2时才运行setUserVisibleHint(boolean isVisibleToUser)
setUserVisibileHint() 来知道当前一个fragment对用户来说是隐藏还是显示,这个方法仅仅工作在FragmentPagerAdapter中,不能被使用在一个普通的activity中。
此方案局限在于此方法的第一次系统调用甚至早于Fragment的onCreate方法,故其第一次调用时isVisibleToUser值总为false,影响我们对生命周期顺序的判定;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_exam, container, false); // 标记 isCreated = true; return rootView; }
//切换Fragment刷新 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (!isCreated) { return; } if (isVisibleToUser) { //当此fragment正当前显示是,执行该操作, //网络请求或者刷新数据 Log.e("TAG", "onStart: ++++++++++++++++++" ); //ListView适配器刷新,更新答题状态显示 adapter1.notifyDataSetChanged(); } else { // 相当于Fragment的onPause // System.out.println("ChatFragment ---setUserVisibleHint---isVisibleToUser - FALSE"); } }