嘿我试图这样做tutorial现在我遇到的问题是,当我启动应用程序时它会崩溃,因为我的片段的参数为空。我找到了一个答案,我必须从我的content_main.xml中删除片段,但是当我这样做时,应用程序启动但行为很奇怪,我不认为这是问题的正确答案。
因此我的MainActivityFragment的onCreate()在java代码之前调用,所以我遇到了这些问题:
Request.Browser.IsMobileDevice
这个问题的解决方案是什么?
我的代码在github
答案 0 :(得分:1)
根据您的 GitHub 项目,您正在以错误的方式实施Fragment
实例化。
当您调用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
函数。