基本上标题是什么,
我的申请主要包含使用ViewPager
FragmentStatePagerAdapter
当我向FragmentStatePagerAdapter添加一系列SurfaceViews
时,会出现问题。
仅出于测试目的,我没有以任何方式继承SurfaceViews。
当我浏览几页时,点击“home”,然后返回活动,整个设备在渲染任何内容之前冻结一两秒钟。我可以在从背包中取出后恢复所需的时间几次启动并完成()应用程序。我知道应用程序正在运行,因为在第一次screendraw最终发生时,几个AsyncTasks几乎已经完成了。我知道这些AsyncTasks不会导致问题,因为我已将它们删除无效。
当我将SurfaceViews更改为Views
时,问题就完全消失了。
当我使用我的实际SurfaceViews(我的项目不可协商)时,会出现此问题。多个设备上也会出现此问题。
此时我认为错误完全在于ViewPager,但我不知道该怎么办,因为我需要那个接口组件。
非常感谢任何帮助!
编辑:
为了澄清,SurfaceViews / Views表示添加到FragmentStatePagerAdapter的片段视图。
答案 0 :(得分:5)
找到任何未来googlers的解决方案!
继承人我是怎么做到的:
在我的片段中,我在onCreate()
中实例化了mySurfaceView然后我在onCreateView()期间将虚拟布局(LinearLayout)附加到实际视图
然后在onResume()中我用removeAllViews()清除了虚拟布局,然后调用addView(mySurfaceView)
这似乎允许ViewPager快速构建其布局,然后在用户实际需要查看任何内容之前弹出SurfaceView!
答案 1 :(得分:0)
我找到的更好的解决方案是
getItem()
FragmentPageAdapter
Fragment
时,使用Handler
现在,每当你的Fragment页面适配器尝试返回SurfaceView
时,它将等待2秒或其他任何事情。 Surface View将在那个时候开始。显示下面的
fragmentAdapter extends FragmentPageAdapter
...
@Override
getItem(int position)
...
if (position == 0)
> final Handler handler = new Handler();
> handler.postDelayed(new Runnable() {
> @Override
> public void run() {
> // initiate SurfaceView
> // return fragment after 5s
> }
> }, 5000);