gpt4 book ai didi

android - Kotlin - 创建 Fragment newInstance 模式的惯用方式

转载 作者:IT老高 更新时间:2023-10-28 13:29:43 28 4
gpt4 key购买 nike

在 Android 上创建 Fragment 的最佳实践是使用静态工厂方法并通过 setArguments()Bundle 中传递参数.

在 Java 中,这样做是这样的:

public class MyFragment extends Fragment {
static MyFragment newInstance(int foo) {
Bundle args = new Bundle();
args.putInt("foo", foo);
MyFragment fragment = new MyFragment();
fragment.setArguments(args);
return fragment;
}
}

在 Kotlin 中,这转换为:

class MyFragment : Fragment() {
companion object {
fun newInstance(foo: Int): MyFragment {
val args = Bundle()
args.putInt("foo", foo)
val fragment = MyFragment()
fragment.arguments = args
return fragment
}
}
}

支持与 Java 的互操作是有意义的,因此仍然可以通过 MyFragment.newInstance(...) 调用它,但是如果我们不这样做,在 Kotlin 中是否有更惯用的方法来做到这一点?不需要担心 Java 互操作?

最佳答案

我喜欢这样做:

companion object {
private const val MY_BOOLEAN = "my_boolean"
private const val MY_INT = "my_int"

fun newInstance(aBoolean: Boolean, anInt: Int) = MyFragment().apply {
arguments = Bundle(2).apply {
putBoolean(MY_BOOLEAN, aBoolean)
putInt(MY_INT, anInt)
}
}
}

编辑:使用 KotlinX 扩展,您也可以这样做

companion object {
private const val MY_BOOLEAN = "my_boolean"
private const val MY_INT = "my_int"

fun newInstance(aBoolean: Boolean, anInt: Int) = MyFragment().apply {
arguments = bundleOf(
MY_BOOLEAN to aBoolean,
MY_INT to anInt)
}
}

关于android - Kotlin - 创建 Fragment newInstance 模式的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47104345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com