Android实现ViewPager滑动播放视频,ViewPager+Fragment取消懒加载问题
16lz
2021-01-26
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 * @return */ protected 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
更多相关文章
- 2018-06-15 Android加载GIF图片的两种方式
- android 动画 ——视图动画(View Animation)
- Android情景分析之深入解析system_server
- android程序入口
- Android读取资源文件夹里的string-array字符串数组
- Android(安卓)用HorizontalScrollView实现ListView的Item滑动删
- 浅谈android add_service PERMISSION DENIED问题
- Android异步加载
- android 图片加载