方法1
public static MyFragment newInstance(int index) {
MyFragment f = new MyFragment();
Bundle args = new Bundle(1);
args.putInt("index", index);
f.setArguments(args);
return f;
}
Usge
Myfragment.newInstance(1);
方法2
public MyFragment newInstance(int index) {
Bundle args = new Bundle(1);
args.putInt("index", index);
setArguments(args);
return this;
}
Usge
new Myfragment().newInstance(1);
在上面的片段中哪一个更合适,更可取,请指出原因?
现在正在这样做..
List<Fragment> fragments = new ArrayList<>();
fragments.add(new MyFragment().newInstance(defaultId));
int i = 1;
for (Categories categories : mCategories) {
String id = categories.getCategory_id();
String name = categories.getCategory_name();
// String slno = categories.getSlno();
fragments.add(new MyFragment().newInstance(defaultId));
Titles[i] = name;
i++;
}
这有什么不对吗?
答案 0 :(得分:2)
方法1优于方法2。
那是因为在方法1中你确实创建了一个MyFragment
对象。在方法2中,首先创建一个MyFragment
对象,然后使用newInstance(...)
对其进行初始化。如果你想使用方法2我建议用2行:
MyFragment frag = new MyFragment();
frag.initialize(1);
使用initialize方法:
public void initialize(int index) {
Bundle args = new Bundle(1);
args.putInt("index", index);
setArguments(args);
}
答案 1 :(得分:1)
继续Method 1
。始终尝试使用Static Factory Methods
而不是Constructors
。为什么你需要使用它可以在着名的书Effective Java
中找到Joshua Bloch:Item1 - Static Factory Method。
您也可以参考:Effective Java By Joshua Bloch: Item1 - Static Factory Method