FragmentPagerAdapter和之间有什么区别FragmentStatePagerAdapter?
关于FragmentPagerAdapterGoogle的指南说:
此版本的寻呼机最适合在有少量通常更多静态片段进行分页时使用,例如一组选项卡.用户访问的每个页面的片段将保留在内存中,但其视图层次结构可能在不可见时被销毁.这可能导致使用大量内存,因为片段实例可以保持任意数量的状态.对于较大的页面集,请考虑
FragmentStatePagerAdapter.
关于FragmentStatePagerAdapter:
当存在大量页面时,此版本的寻呼机更有用,更像列表视图.当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态.与
FragmentPagerAdapter在页面之间切换时可能更多的开销相比,这允许寻呼机保持与每个被访问页面相关联的更少的存储器 .
所以我只有3个片段.但它们都是具有大量数据的独立模块.
Fragment1处理一些数据(用户输入)并通过活动传递给它Fragment2,这很简单ListFragment.Fragment3也是一个ListFragment.
所以我的问题是:我应该使用哪种适配器?FragmentPagerAdapter还是FragmentStatePagerAdapter?
android android-fragments android-viewpager fragmentpageradapter fragmentstatepageradapter
我有将数据传递给片段的问题.它在生产中的所有时间都有0.1%的崩溃.让我们说100k开放活动它发生了100次.它看起来并不常见,但它非常困扰我,我认为我在使用数据进行片段初始化时出错了.问题是,我只创建了一次片段,而其他所有时间我都需要将数据传递给它们我正在做下一步:myFragmentInstance.setData(Object someData);发生崩溃是因为它告诉片段中的那些视图元素未找到并且它们是NULL,但如果我没有重新创建它们,一切都应该没问题.我没有旋转手机,也没有足够的内存.它发生在网络重新连接上,因为在网络重新连接时,我将服务器获取新数据,然后将新数据设置为我的片段.我有我使用的两个片段的字段照片,maby你们中的一些人知道这些数据可以告诉崩溃时片段的状态.我正在使用库ButterKnife初始化片段和活动的字段,而不是初始化它findById,maby它有一些影响或没有?
这里是简单项目的链接(在github上只有这个问题): https ://github.com/yozhik/Reviews/tree/master/app/src/main/java/com/ylet/sr/review
描述:
CollapsingActivity- 活动Collapsing AppBarLayout.它将一个或两个片段加载到" fragment_content_holder"中,并且必须TabLayout在视图寻呼机中的片段之间切换.
在活动方法onCreate()- 我只是模拟对server(loadData)的请求,并且当加载一些假数据时 - 我在第一次调用时在视图寻呼机中显示片段 - 我正在创建新的TabMenuAdapter扩展FragmentPagerAdapter,用片段填充它并保存到实例的链接.在下一个调用中 - 我不会从头开始创建片段,只是用新数据填充它们.
MenuFragment1, MenuFragment1 - 两个片段.MenuFragment1- 有方法public void setupData(SomeCustomData data),设置新数据,不在网络重新连接上重新创建片段.
NetworkStateReceiver - 收听网络更改并发送通知.
TabMenuAdapter - 只是简单的类来保存片段.
05-11 18:11:05.088 12279-12279/com.myProjectName E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myProjectName, PID: 12279
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:111)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95) …Run Code Online (Sandbox Code Playgroud) android android-fragments fragmentpageradapter butterknife android-tablayout