我有两个片段。在第一个片段中有一个接口,我通过该接口将变量传递给活动(按预期传递),并且已经在活动中我尝试将此变量传递bundle
给第二个片段并显示它,但我得到FATAL EXCEPTION
.
活动界面:
override fun subChapterItem(chapterId: Int) {
SubChapterBottomSheet.newInstance(chapterId)
val subChapterBottomSheet = SubChapterBottomSheet()
subChapterBottomSheet.show(supportFragmentManager, SubChapterBottomSheet.SubChaptersTag)
}
我试图将变量传递到的片段中的代码:
companion object {
const val SubChaptersTag = "sub_chapters_tag"
private const val ARG_SECTION_NUMBER = "section_number"
@JvmStatic
fun newInstance(sectionNumber: Int): SubChapterBottomSheet {
return SubChapterBottomSheet().apply {
arguments = Bundle().apply {
putInt(ARG_SECTION_NUMBER, sectionNumber)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val sectionNumber = arguments?.getInt(ARG_SECTION_NUMBER) // Здесь выходит `FATAL EXCEPTION`
}
UPD
Process: com.example, PID: 14217
kotlin.KotlinNullPointerException
at com.example.ui.fragment.FirstSubChapterBottomSheet.onCreate(FirstSubChapterBottomSheet.kt:48)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:270)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1173)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6831)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:927)
这是您实例化片段的地方,但不要将其分配给任何东西。在该行下方,您再次创建片段的实例,但根本没有任何参数。
应该是这样的
我认为这就是问题所在。
您的代码中有严重的逻辑错误。该行
SubChapterBottomSheet.newInstance(chapterId)
使用您需要的值创建一个片段,但不会将其保存在任何地方。然后在val subChapterBottomSheet = SubChapterBottomSheet()
您创建另一个片段但不使用参数并为该字段设置值。您附加这个“错误”的片段并得到错误的结果。修复很简单——你需要将 getInstance 返回的内容保存到一个变量中,并且永远不要对片段使用构造函数调用。将其设置为私有,这样您就不会在其他地方意外使用它