0

我有扩展片段的 MyFragment 类。

MyFragment 包含用户可以编辑的不同小部件(视图)。每个小部件的初始值是在构建 MyFragment 片段时计算的。

然后用户可以在之后编辑这些值。

显而易见的实现是有构造函数: MyFragment(String value1,int value2) { } 设置初始小部件值,然后我只需要实现 onSaveInstanceState 来保存每个小部件的值,因此它们可以通过 onCreateView 恢复。

容易,但有一个问题。我无法向 MyFragment 添加带有参数的构造函数,因为 eclipse/adt 不允许这样做。将 @SuppressLint("ValidFragment") 添加到构造函数中是否安全,或者是否有更好的方法来处理这个问题?

4

3 回答 3

1

你应该使用Fragment.setArguments(Bundle). 将值放在 Bundle 中,您可以在调用onCreateoronCreateView时读取它。onActivityCreated

于 2013-07-10T14:18:00.533 回答
0

或者在 foo 是成员变量的地方使用它

public YourFragment newInstance (Foo foo) {
    YourFragment frag = new YourFragment ();
     frag.setFoo (foo);
     return frag;
}

public void setFoo (Foo foo) {
    this.foo = foo;
}
于 2013-07-10T14:26:28.507 回答
0

不使用自定义构造函数,而是构建一个静态方法来获取一个新的 MyFragment 实例并添加一个 Bundle:

public MyFragment newInstance(String value1, int value2) {
    MyFragment f = new MyFragment();
    Bundle args = new Bundle();
    args.putString("value1",value1);
    args.putInt("value2",value2);
    f.setArguments(args);
    return f;
}

在 onCreate 中,检索 Bundle 并获取您的值:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String value1 = getArguments().getString("value1");
    int value2 = getArguments().getInt("value2");
}
于 2013-07-10T14:23:12.577 回答