我有扩展Fragment的Class MyFragment。
MyFragment包含用户可以编辑的不同小部件(视图)。构建MyFragment片段时计算每个小部件的初始值。
然后用户可以在之后编辑值。
明显的实现是使用构造函数:MyFragment(String value1,int value2){}设置初始窗口小部件值,然后我只需要实现onSaveInstanceState来保存每个窗口小部件的值,这样它们就可以通过onCreateView。
容易,但有一个问题。我无法在MyFragment中添加一个带有参数的构造函数,因为eclipse / adt不允许这样做。将@SuppressLint(“ValidFragment”)添加到构造函数中是否安全,还是有更好的方法来处理它?</ p>
答案 0 :(得分:1)
您应该使用Fragment.setArguments(Bundle)
。将值放在Bundle中,您可以在调用onCreate
或onCreateView
或onActivityCreated
时阅读它。
答案 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;
}