首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android IllegalStateException: Fragment null必须是公共静态类,才能从实例状态正确重建

这个异常通常在使用Fragment进行状态恢复时出现。它表示Fragment的类必须是公共静态类,以便在实例状态恢复期间正确重建。

在Android中,当Activity发生配置更改(例如屏幕旋转)或由于内存不足而被系统销毁并重新创建时,Fragment的状态也需要被保存和恢复。为了正确地保存和恢复Fragment的状态,Fragment类必须是公共静态类。

公共静态类是指在Java中使用static修饰符声明的类,并且可以从任何其他类访问。这是因为在Activity重新创建时,系统会使用无参构造函数创建Fragment的新实例,并通过调用Fragment的setArguments()方法传递之前保存的状态数据。如果Fragment类不是公共静态类,系统无法访问该类并创建新的实例,从而导致上述异常。

为了解决这个问题,可以将Fragment类声明为公共静态类。这样,在Activity重新创建时,系统就能够正确地重建Fragment的实例状态。

以下是一个示例代码,展示了如何声明一个公共静态Fragment类:

代码语言:txt
复制
public static class MyFragment extends Fragment {
    // Fragment的实现代码
}

在这个示例中,MyFragment类被声明为公共静态类,可以在任何其他类中访问。

总结一下,当遇到Android IllegalStateException: Fragment null必须是公共静态类,才能从实例状态正确重建的异常时,需要将相关的Fragment类声明为公共静态类,以便在Activity重新创建时能够正确地重建Fragment的实例状态。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mmp
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云音视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅作为参考,具体的产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fragment基本使用

的remove()、replace()方法将碎片活动中移除,但如果在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。...他抽象,具体的实现FragmentManagerImpl。 FragmentTransaction:对Fragment的添加、删除等操作都需要通过事务方式进行。...Fragment使用 使用Fragment有两种方式,分别是静态加载和动态加载 2.1 静态加载 关于静态加载的流程如下: 定义Fragment的xml布局文件 自定义Fragment,继承Fragment...; 最后调用commit()方法提交事务 简单示例: 同静态加载一样,首先定义Fragment的布局和,修改主布局文件,不指定标签的name属性。...的状态依然由FragmentManager维护 attach():重建view视图,附加到UI上并显示。

1.8K30

Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制

虽然被杀死了,但是onCreate函数在执行的时候还是只执行了一次啊,为什么会出现两个DialogFragment,这里其实就有一个DialogFragment通过Android自身的恢复重建机制重建出来...is attached to its activity. */ public Fragment() { } 大意就是,Fragment必须有一个空构造方法,这样才能保证重建流程,并且,Fragment...提供无参构造函数后,Fragment可以正确的新建出来,之后呢?...(fragment, false); } return fragment; } 1与2 可以看出,通过后台恢复,在FragmentActivity的onCreate函数中,会重建Fragment...也有相应的后台杀死处理机制,名字就能看出,这个专门针对Fragment才创建出来的控件。

2.9K30

使用 Architecture Component 实现 MVVM 的正确姿势

答案肯定是否定的,但是 Android 给我提供了一套组件,可以让我们更方便地用 MVVM 模式来开发,减少我们重复造轮子的工作量 ViewModel ViewModel 官方提供的,用于管理 UI...它可以实现当 Activity 状态发生变化诸如屏幕旋转的时候,数据能保存下来而不会丢失。...Activity 长的,因此我们不应该在 ViewModel 中持有 View 或者任何和 Activity context 引用关系的,否则会引发内存泄露的风险 ViewModel 实例化传参 有时候我们希望给创建的...时,必须在 Activity onCreate 之后或者 Fragment onAttach 之后再使用,否则会报 IllegalStateException /** * Returns the...ViewModelStore getViewModelStore() { if (mFragmentManager == null) { throw new IllegalStateException

75320

【AAC 系列四】深入理解架构组件:ViewModel

前言 本文深入理解「Android Architecture Components」系列文章第四篇 源码基于 AAC 1.1.1 版本 【AAC 系列一】Android 应用架构新时代来临!...,而不是在 Activity 重建后重新去获取。...ViewModel 的基本使用 ViewModel 的使用也非常简单,Android 提供了一个 ViewModel 让我们去继承,并且提供了 ViewModelProviders 来帮助我们实例化...ViewModel 的实例,如果为null ,那么会通过 Factory 去创建,并把新的实例存入到 ViewModelStore。...总结 ViewModel 利用 Fragment 的特性,提供给我们一个方式在特定的生命周期内去管理跟 UI 相关的数据;能够帮助我们把数据管理的逻辑 Activity/Fragment 中剥离开。

86940

“终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

UI层(如 Activity 和 Fragment)经常需要通过逻辑层(如MVP中的Presenter)进行异步请求,可能需要一些时间才能返回结果,如果逻辑层持有UI层应用(如context),那么UI...三、源码分析 经过前面的介绍,我们知道ViewModel的核心点 就是 因配置更新而界面(Activity/Fragment重建后,ViewModel实例依然存在,这个如何实现的呢?...* ViewModelStore实例 必须要能 在系统配置改变后 依然存在。...所以屏幕旋转等的配置改变 不会影响到这个实例?继续看这个猜想是否正确。...ViewModel我们后续建立MVVM架构的重要组件。这也是我们必须掌握和理解的部分。

1.7K10

Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

这里我就不打码了,,哈哈哈哈 TabLayout TabLayout的静态使用 TabLayoutAndroid 5.0之后Google提供的一系列Material Design设计规范中的一个控件。...};*/ public class ViewPager extends ViewGroup { } 上面英文的大致意思ViewPager一个布局管理,这个呢允许用户左右翻转页面。...适配器PagerAdapter个抽象,并且依照官方说明,我们必须至少实现其4个重要方法。...可见状态发生变化时会回调该方法 * * 如果当前fragment第一次加载,等待onCreateView后才会回调该方法,其它情况回调时机跟 {@link #setUserVisibleHint...,所有的公共行为我们都可以在这个基中定义,那么我们的Fragment是否可见就是其中的一种行为,所以我们上面重写了Fragment的setUserVisibleHint方法。

1.7K10

精选Android中高级高频面试题:四大组件及Fragment原理

,onCreate和onDestroy配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用; Activity是否可见来说,onStart和onStop配对的,这两个方法可能被调用多次...所以如果在fragment生命周期内获取获取数据,使用replace会重复获取; 添加相同的fragment时,replace不会有任何变化,add会报IllegalStateException异常;..., 如果fragment嵌套fragment,那么就需要利用getChildFragmentManager(); 因为Fragment3.0 Android系统API版本才出现的组件,所以3.0以上系统可以直接调用...因此适用于那些数据相对静态的页,Fragment数量也比较少的那种; FragmentStatePagerAdapter只保留当前页面,当页面不可见时,该Fragment就会被消除,释放其资源。...系统强制杀掉之后,Android系统会将该Service依然设置为started状态(即运行状态),但是不再保存onStartCommand方法传入的intent对象 START_NOT_STICKY:

1.7K00

Android Fragment 使用

Fragment如何产生,什么FragmentFragment生命周期,如何静态和动态的使用FragmentFragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:...关联被取消时调用 注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父对于该方法的实现, 3、静态的使用Fragment 嘿嘿,终于到使用的时刻了~~ 这是使用Fragment最简单的一种方式...transaction.remove() Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。...值得注意的:如果你喜欢使用Fragment,一定要清楚这些方法,哪个会销毁视图,哪个会销毁实例,哪个仅仅只是隐藏,这样才能更好的使用它们。...Fragment创建对话框 6、如何与ActionBar,MenuItem集成等~~ 会将viewUI中移除,和remove()不同,此时fragment状态依然由FragmentManager维护

44820

Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

get() 方法内部首先会通过 ViewModel 的全限定映射表(ViewModelStore)中取缓存,未命中才会通过 ViewModel 工厂创建实例再缓存到映射表中。...对于 Activity 来说,ViewModelStore 实例直接存储在 Activity 的成员变量中的; 对于 Fragment 来说,ViewModelStore 实例间接存储在 FragmentManagerViewModel...ViewModel 底层基于原生 Activity 因设备配置变更重建时恢复数据的机制实现的,这个其实跟 Fragment#setRetainInstance(true) 持久 Fragment 的机制相同的...当 Activity 因配置变更而重建时,我们可以将页面上的数据或状态可以定义为 2 : 第 1 - 配置数据: 例如窗口大小、多语言字符、多主题资源等,当设备配置变更时,需要根据最新的配置重新读取新的数据...基于以上考虑,Activity 支持在设备配置变更重建时恢复 第 2 - 非配置数据 的,源码中存在 NonConfiguration 字眼的代码,就是与这个机制相关的代码。

1.1K20

Android面试题(四大组件篇)

而onpause(),不管可能销毁还是退出程序,都必须调用,适合保存持久性的数据,但是android本身没有为此方法提供bundle参数,因此我们可以选用做一个静态变量或者提供一个sharedpreference...2.不要在Application和全局单例中存放数据,会导致app无法正确恢复状态。...2、灵活性上来说 Activity四大组件之一,每个页面的承载,一个就是一个,Fragment的显示要依赖于Activity,Fragment的生命周期中就可以了解到。...静态注册无需担忧广播接收器是否被关闭,只要设备开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。...这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

86120

Jetpack:新一代导航管理Navigation

/> 用于暂时占位以便后面可以替换为Fragment和Activity 添加完页面后,我们还需要添加页面之间的导航,可以手动添加action标签,当然也可以通过拖拽来实现,如下: 这样我们就添加了一个...添加NavHost 下一步我们需要向Activity中添加导航宿主,导航宿主一个空页面,必须实现NavHost接口,我们使用Navigation提供的默认NavHost————NavHostFragment...标签,android:name设置为实现,即NavHostFragment;app:navGraph设置为刚才新建的导航视图。...= NavHostFragment.findNavController(this) 实际上NavHostFragment的一个静态函数findNavController: @NonNull...throw new IllegalStateException("Fragment " + fragment + " does not have a NavController

83520

Android技能树 — Fragment总体小结

如果想要立即执行,可以在commit之后立即调用FragmentManager的executePendingTransactions()方法. 2. commit()方法必须状态存储之前调用,否则会抛出异常...fragment执行onDestoryView,并没有执行onDestory,fragment实例对象还是存在,当回退时候,fragmentonCreateView处执行 2....所以我们比如一些对象可以保持在fragment中,这时候Activity重新恢复后,其他对象可以fragment中找回。...Fragment重建恢复数据 推荐下面这篇文章: [译] 保存/恢复 Activity 和 Fragment 状态的最佳实践 引用一段话: 完全分开处理Fragment状态和view状态 为了使你的代码变得干净和可扩展...,你最好把Fragment状态和View状态分开处理。

16810
领券