在网上看了很多了帖子,像在Fragment中定义一个布尔类型的值用来标识,在onCreateAnimation的方法里进行判断,但在我这没有什么卵用,一共分为三种我都贴出来,万一在你那有点卵用呢.
第一种,使用onCreateAnimation方法
private boolean isGetData=false;
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
//进入到当前Fragment
if (enter&&isGetData){
isGetData=true;
//进行刷新操作
}else {
isGetData=false;
}
return super.onCreateAnimation(transit, enter, nextAnim);
}
@Override
public void onPause() {
super.onPause();
isGetData=false;
}
//加上这个方法可能会执行两次刷新操作,可以去掉试试
@Override
public void onResume() {
if (isGetData){
//进行刷新操作
isGetData=true;
}
super.onResume();
}
第二种方法:使用onHiddenChanged方法,也对我免疫
@Override
public void onHiddenChanged(boolean hidden) {
if (hidden){
//进行刷新操作
}
super.onHiddenChanged(hidden);
}
找到了以上方法为什么不好使
Fragment里面的onResume和onPause,但这两个方法是Activity的,调用时机也是Activity的。
真正的Fragment的onResume和onPause方法,其实是setUserVisibleHint方法
最后贴上对我有用的执行刷新页面的方法----使用setUserVisibleHint方法
这个貌似有点BUG,当点击别的Fragment时,他也会执行刷新操作
private boolean isCreated=false;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isCreated=true;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isCreated){
return;
}else {
//进行刷新操作
}
}