Java 如何使用对象参数创建片段?

Java 如何使用对象参数创建片段?,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,我想创建一个片段,并将复杂类型(MyClass)作为其参数。 政府并没有真正提到这一点。我能够找到一些带有Bundle的示例,但这些示例只包含简单的参数,如String和Integer,您最好的选择可能是序列化复杂类并在片段中再次反序列化它 大概是 bundle.putString("object_key", gson.toJson(yourClassInstance)); 然后用 Type yourClassType = new TypeToken<YourClas

我想创建一个片段,并将复杂类型(MyClass)作为其参数。
政府并没有真正提到这一点。我能够找到一些带有
Bundle
的示例,但这些示例只包含简单的参数,如
String
Integer

,您最好的选择可能是序列化复杂类并在片段中再次反序列化它

大概是

bundle.putString("object_key", gson.toJson(yourClassInstance));
然后用

Type yourClassType = new TypeToken<YourClass>() {}.getType();
YourClass yourClassInstance = gson.fromJson(bundle.getString("object_key"), yourClassType);

有关更多信息,请参见

您的最佳选择可能是序列化复杂类并在片段中再次反序列化它

大概是

bundle.putString("object_key", gson.toJson(yourClassInstance));
然后用

Type yourClassType = new TypeToken<YourClass>() {}.getType();
YourClass yourClassInstance = gson.fromJson(bundle.getString("object_key"), yourClassType);

有关更多信息,请参见

您可以创建一个名为
getInstance()
createInstance()
的静态方法,或者创建具有某些值的片段

Java版本:

public static MyFragment newInstance(int arg) {

    Bundle args = new Bundle();
    args.putInt("ARG", arg);

    MyFragment fragment = new MyFragment();
    fragment.setArguments(args);
    return fragment;
}
Kotlin版本:

class MyFragment : Fragment() {
    companion object {
       fun newInstance(arg: Int): MyFragment {
            val args = Bundle()
            args.putInt("ARG", arg)
            val fragment = MyFragment()
            fragment.arguments = args
            return fragment
        }
    }
}
我能够找到一些Bundle的示例,但这些示例只包含 简单参数,如字符串和整数

要在
包中传递自定义对象,可以使用make-your-class或。对于Parcelable,您可以使用方法将对象存储在Bundle中

对于Android中的
Parcelable
Serializable
,请检查

您将在Android Studio中找到一些插件,这些插件将自动为您的类生成
Parcelable
实现代码

另一种方法是使用将对象转换为字符串,并将该字符串放入捆绑包中


对于
Gson
check

,您可以创建一个名为
getInstance()
createInstance()
的静态方法,或者任何您喜欢的用于创建具有某个值的片段的方法

Java版本:

public static MyFragment newInstance(int arg) {

    Bundle args = new Bundle();
    args.putInt("ARG", arg);

    MyFragment fragment = new MyFragment();
    fragment.setArguments(args);
    return fragment;
}
Kotlin版本:

class MyFragment : Fragment() {
    companion object {
       fun newInstance(arg: Int): MyFragment {
            val args = Bundle()
            args.putInt("ARG", arg)
            val fragment = MyFragment()
            fragment.arguments = args
            return fragment
        }
    }
}
我能够找到一些Bundle的示例,但这些示例只包含 简单参数,如字符串和整数

要在
包中传递自定义对象,可以使用make-your-class或。对于Parcelable,您可以使用方法将对象存储在Bundle中

对于Android中的
Parcelable
Serializable
,请检查

您将在Android Studio中找到一些插件,这些插件将自动为您的类生成
Parcelable
实现代码

另一种方法是使用将对象转换为字符串,并将该字符串放入捆绑包中

对于
Gson
检查