最近知道viewpager有缓存机制,但是我的fragment中有动画,一缓存切换时效果就没出,怎么办???
遇上这个问题我第一想到的是消除缓存,网上有很多资料,但最后试了都不是很理想。最后遇上一位大神,才知道有懒加载的方法。
1.首先写个lazyfragment作为基类
public abstract class LazyFragment extends Fragment {
protected boolean isVisible;
/**
* 在这里实现Fragment数据的缓加载.
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected void onVisible(){
lazyLoad();
}
protected abstract void lazyLoad();
protected void onInvisible(){}
}
2.在你需要延长的地方实现懒加载
public class MovieListFragment extends LazyFragment {
private boolean isPrepared;
private MovieAdapter adapter = null;
private List<Movie> movieList;
private ListView movieListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.movie_list_fragment,null);
movieListView = (ListView) v.findViewById(R.id.lv_movie);
isPrepared = true;
lazyLoad();
return v;
}
//懒加载
@Override
protected void lazyLoad() {
// TODO Auto-generated method stub
if(!isPrepared || !isVisible) {
return;
}
//填充各控件的数据
movieInit();
adapter = new MovieAdapter(getActivity(), R.layout.movie_item, movieList);
movieListView.setAdapter(adapter);
movieListView.setLayoutAnimation(new ListAnim().getListAnim());
}