Android片段:真的需要空构造函数吗?
我有一个活动,里面有一个寻呼机和一个FragmentStatePagerAdapter(我需要在多个页面上滑动)。我们都知道,这个适配器一次创建3个片段实例,一个要显示,一个上一个和一个下一个 使用一个只有一个构造函数的片段,我的活动运行得非常好:它收到了一个参数。测试时,我开始得到一个臭名昭著的信息:Android片段:真的需要空构造函数吗?,android,android-fragments,Android,Android Fragments,我有一个活动,里面有一个寻呼机和一个FragmentStatePagerAdapter(我需要在多个页面上滑动)。我们都知道,这个适配器一次创建3个片段实例,一个要显示,一个上一个和一个下一个 使用一个只有一个构造函数的片段,我的活动运行得非常好:它收到了一个参数。测试时,我开始得到一个臭名昭著的信息: Unable to instantiate fragment: make sure class name exists, is public, and has an empty constru
Unable to instantiate fragment: make sure class name exists, is public,
and has an empty constructor that is public
有趣的是,这条信息只会在方向改变后立即显示,但如果方向保持不变,应用程序就会工作。所以
FragmentStatePagerAdapter
或者,引用:
Fragment的所有子类必须包含一个公共空构造函数。框架通常会在需要时重新实例化片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果空构造函数不可用,则在某些情况下,在状态还原期间会发生运行时异常
如果是这样,为什么框架在重新创建活动和片段时遵循不同的步骤。我的意思是,如果碎片和活动被销毁,为什么不按照第一次采取的相同创建步骤进行呢?@Mark:因为它不能。您在代码中第一次创建了片段。安卓不是你。Android无法识别代码中碰巧执行
FragmentTransactions
的随机语句,更不用说以某种方式重放这些语句了。我的意思是,框架正在破坏活动及其内部片段。为什么不重新运行第一次创建的代码?@Mark:因为Android不知道你的代码在哪里。例如,您可能添加了一个片段以响应操作栏项。确切地说,你希望Android如何知道它需要假装点击一个动作条来重新创建那个片段?那么,你在操作条项目处理程序中拥有的所有其他逻辑会被重新执行吗?好的,明白了。我的应用程序目前很简单,所以我没有遇到过这样的情况。谢谢你的耐心!!