【发布时间】:2021-06-10 04:38:49
【问题描述】:
我实际上是 android 新手。我现在对如何在片段中实现 newInstance() 感到困惑。我在这里有 2 个片段和 1 个活动:
- 片段 A 作为抽象类
- 片段 B 作为包含参数的主片段类
- MainActivity.kt 作为 Activity
所以我得到了这样的错误日志:
Caused by androidx.fragment.app.Fragment$e: Unable to instantiate fragment : could not find Fragment constructor
............
Caused by java.lang.NoSuchMethodException: <init> []
at java.lang.Class.getConstructor0
根据日志,我认为问题出在我没有初始化任何 0-arg 构造函数的片段上。所以正因为如此,我想在我的片段中为 newInstance() 添加一个伴随对象,但我不能,这是我的 FragmentA.kt 和 FragmentB.kt :
FragmentA.kt
abstract class FragmentA: BottomSheetDialogFragment() {
companion object {
fun newInstance(): FragmentA{
return FragmentA() //Got a red mark here, because I cannot create newInstance() in an abstract class
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment...,getStyle)
}
}
FragmentB.kt
class FragmentB(val Parameterss: AnyParametersHere) : FragmentA() {
companion object {
fun newInstance(): FragmentB{
return FragmentB() //Got a red mark here, because it requires parameter inside the FragmentB()
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState)
..................................................................
return dialog
}
}
MainActivity.kt 在 MainActivity.kt 中,是否可以将 newInstance() 添加到其伴随对象中?如果不是,这种情况的最佳解决方案是什么?
class MainActivity : AppCompatActivity() {
companion object {
fun newInstance(): MainActivity {
return newInstance()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
...................................
val fragmentB= FragmentB(this)
fragmentB.show(supportFragmentManager, FragmentB.TAG)
}
}
我很困惑,如果您有任何更好的解决方案,我会很感激。谢谢
【问题讨论】:
标签: java android kotlin android-fragments