带有参数的Android碎片构造函数

时间:2013-07-10 14:14:40

标签: android constructor fragment

我有扩展Fragment的Class MyFragment。

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

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

明显的实现是使用构造函数:MyFragment(String value1,int value2){}设置初始窗口小部件值,然后我只需要实现onSaveInstanceState来保存每个窗口小部件的值,这样它们就可以通过onCreateView。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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");
}

答案 2 :(得分:0)

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

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

public void setFoo (Foo foo) {
    this.foo = foo;
}
相关问题