我使用Kotlin创建了一个片段,你知道如何在Java中设置片段args的方便静态方法.像这样:
public static MyFragment newInstance(Bundle args){
MyFragment fragment = new MyFragment();
fragment.setArguments(args);
return fragment;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用伴侣对象在Kotlin中完成此操作,因为它是静态的.这是我到目前为止编译的内容:
companion object {
fun newInstance(@Nullable b: Bundle): MyFragment {
val frag = MyFragment()
frag.arguments = b
return frag
}
}
Run Code Online (Sandbox Code Playgroud)
我在想,如果我使用@Nullable注释,我将被允许传入null for bundle但是当我调用时,我一直收到以下错误MyFragment.newInstance(null):
致命异常:主进程:com.mobile.MyApp.labs,PID:5758 java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,com.mobile中的参数b.来自com.mobile.MyApp的com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment.onCtaClicked(CartDetailsFragment.java:521)中的MyApp.ui.cart.fragments.MyFragment $ Companion.newInstance(MyFragment.kt:0). ui.cart.fragments.CartDetailsFragment_ViewBinding $ 1.doClick(CartDetailsFragment_ViewBinding.java:66)位于android.view.View.performClick(View.java:6256)的butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22).在Android.os.Loo上的android.os.Handler.dispatchMessage(Handler.java:98)的android.os.Handler.handleCallback(Handler.java:789)上查看$ PerformClick.run(View.java:24701) .loop(Looper.java:164)位于com.andro的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:6541)id.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我怎么能通过null?
在Kotlin中,你不会通过@Nullable,而是?在类型名称后写一个问号()来标记它可以为空.
fun newInstance(b: Bundle?): MyFragment
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1187 次 |
| 最近记录: |