如何防止在Java之前加载碎片的创建?
嘿,我试图做这个教程,现在我得到的问题,当我启动应用程序崩溃,因为我的片段的参数为空。 我发现一个答案,我必须从我的content_main.xml中删除片段,但是当我这样做的应用程序启动,但行为怪异,我不认为这是正确的答案的问题。
所以我的MainActivityFragment的onCreate()在java代码之前调用,所以我得到了这样的问题:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) page = this.arguments.getInt("someInt", 0) title = this.arguments.getString("someTitle") }
什么是正确的解决方案?
我的代码在github上
根据你的GitHub项目,你正在以错误的方式实现Fragment
实例化。 当你invoque var fragment = MainActivityFragment()
,你创建了你的片段的新实例,但没有提供arguments
,所以,当你的片段onCreate
方法被调用时,参数为null
,这就是为什么你的应用程序崩溃的原因。
要解决您的应用程序崩溃,您需要按以下方式实现片段实例化:
MainActivityFragment (已编辑)
// Wrap new instance function inside companion object companion object { // newInstance constructor for creating fragment with arguments fun newInstance(page: Int, title: String): MainActivityFragment { val fragmentFirst = MainActivityFragment() val args = Bundle() args.putInt("someInt", page) args.putString("someTitle", title) fragmentFirst.arguments = args return fragmentFirst } } //... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if(null != this.arguments) { page = this.arguments.getInt("someInt", 1) title = this.arguments.getString("someTitle") } }
MyPagerAdapter
override fun getItem(position: Int): Fragment? { when (position) { 0 // Fragment # 0 - Ensure to return a new fragment instance with valid arguments -> return MainActivityFragment.newInstance(0, "Page # 1") 1 // Fragment # 0 - This will show FirstFragment different title -> return SecondFragment.newInstance(1, "Page # 2") else -> return null } }
不要忘记在伴随对象中包装SecondFragment的 newInstance
函数。
- 在Instant App中应用插件“kotlin-android”会导致“null不能转换为非空类型的com.android.build.gradleBasePlugin”
- Kotlin Gson自定义解串器列表
- Kotlin多点击按钮上的听众
- Android w / Kotlin纯java-Junit的NoClassDefFoundError解决方法不起作用
- Kotlin lambda有几个参数
- 如何使用kotlin创建在构造函数中传递方法引用的泛型类的实例
- 库使用Kotlin检测android中的内存泄漏
- android翻新2图片上传
- 不能在Kotlinunit testing(ExecutionException,Aapt2Exception)