1.首先:
设置ViewPager的verticalViewPager.setOffscreenPageLimit(0),发现无效,但是源码中确实设置0之后默认的是0,然而你滑动的时候发现当前的视频在播放而下一条也会播放。
2.解决 :
public abstract class LazyLoadFragment extends Fragment {
@Bind(R.id.img_detail_image)
TouchImagView imgDetailImage;
@Bind(R.id.voice)
ImageView voice;
@Bind(R.id.pause)
ImageView pause;
@Bind(R.id.img_detail_video)
CustomVideoView imgDetailVideo;
/**
* 视图是否已经初初始化
*/
protected boolean isInit = false;
protected boolean isLoad = false;
protected final String TAG = "LazyLoadFragment";
private View view;
private HttpProxyCacheServer proxy;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(setContentView(), container, false);
GuiceHelper.bind(this,view);
isInit = true;
/**初始化的时候去加载数据**/
isCanLoadData();
return view;
}
/**
* 视图是否已经对用户可见,系统的方法
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
isCanLoadData();
}
/**
* 是否可以加载数据
* 可以加载数据的条件:
* 1.视图已经初始化
* 2.视图对用户可见
*/
private void isCanLoadData() {
if (!isInit) {
return;
}
if (getUserVisibleHint()) {
lazyLoad();
isLoad = true;
} else {
if (isLoad) {
stopLoad();
}
}
}
/**
* 视图销毁的时候讲Fragment是否初始化的状态变为false
*/
@Override
public void onDestroyView() {
super.onDestroyView();
isInit = false;
isLoad = false;
}
protected void showToast(String message) {
if (!TextUtils.isEmpty(message)) {
Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
}
}
/**
* 设置Fragment要显示的布局
*
* @return 布局的layoutId
*/
protected abstract int setContentView();
/**
* 获取设置的布局
*
* @return
*/
protected View getContentView() {
return view;
}
/**
* 找出对应的控件
*
* @param id
* @param <T>
* @return
*/
protected <T extends View> T findViewById(int id) {
return (T) getContentView().findViewById(id);
}
/**
* 当视图初始化并且对用户可见的时候去真正的加载数据
*/
protected abstract void lazyLoad();
/**
* 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以覆写此方法
*/
protected void stopLoad() {
}
}
在fragment中:
public class FeedImageFragment extends LazyLoadFragment {
@Override
protected int setContentView() {
proxy = App.getProxy(getActivity());
String feedDetailJson = getArguments().getString(ARG_SECTION_NUMBER);
feedItem = Util.parseObject(feedDetailJson, FeedItem.class);
return R.layout.fragment_feed_image;
}
//初始化当前页面想执行的
@Override
protected void lazyLoad() {
initView();
}
//实现当前界面不想看到的
@Override
protected void stopLoad() {
imgDetailVideo.stopPlayback();
imgDetailVideo.destroyDrawingCache();
}
}
结果:
完美解决!
参考:https://blog.csdn.net/linglongxin24/article/details/53205878#commentBox