Kotlin - 如何将空值传递给片段 newInstance 方法?
Posted
技术标签:
【中文标题】Kotlin - 如何将空值传递给片段 newInstance 方法?【英文标题】:Kotlin - how to pass in null value into fragments newInstance method? 【发布时间】:2018-06-17 03:30:13 【问题描述】:我已经使用 Kotlin 创建了一个片段,并且您知道如何在 Java 中使用一种方便的静态方法来设置片段参数。像这样:
public static MyFragment newInstance(Bundle args)
MyFragment fragment = new MyFragment();
fragment.setArguments(args);
return fragment;
我正在尝试在 Kotlin 中使用伴随对象来完成此操作,因为它是静态的。这是我到目前为止编译的内容:
companion object
fun newInstance(@Nullable b: Bundle): MyFragment
val frag = MyFragment()
frag.arguments = b
return frag
我在想,如果我使用 @Nullable
注释,我将被允许为捆绑传递 null,但是当我调用 MyFragment.newInstance(null)
时,我不断收到以下错误:
致命异常:主要 进程:com.mobile.MyApp.labs,PID:5758 java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数 b 在 com.mobile.MyApp.ui.cart.fragments.MyFragment$Companion.newInstance(MyFragment.kt:0) 在 com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment.onCtaClicked(CartDetailsFragment.java:521) 在 com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment_ViewBinding$1.doClick(CartDetailsFragment_ViewBinding.java:66) 在 butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22) 在 android.view.View.performClick(View.java:6256) 在 android.view.View$PerformClick.run(View.java:24701) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我怎样才能传入null
?
【问题讨论】:
discuss.kotlinlang.org/t/nullable-as-argument/1884 这在我的情况下不起作用。就像我传入 null 一样,我仍然希望创建并返回片段。 【参考方案1】:在 Kotlin 中,您不传递 @Nullable
,而是在类型名称后面写一个问号 (?
) 以将其标记为可为空。
fun newInstance(b: Bundle?): MyFragment
【讨论】:
另外,请查看有关 Kotlin 中 null 安全性的官方文档:kotlinlang.org/docs/reference/null-safety.html【参考方案2】:Kotlin 提供 (?) FOR 处理 null
.have 看看
companion object
fun newInstance( b: Bundle?): MyFragment
val frag = MyFragment()
frag.arguments = b
return frag
希望对你有所帮助。
【讨论】:
以上是关于Kotlin - 如何将空值传递给片段 newInstance 方法?的主要内容,如果未能解决你的问题,请参考以下文章
将空值传递给 SVG 路径(使用 d3.js)以抑制丢失数据