实例化片段的最佳方式?

时间:2015-10-26 11:35:07

标签: java android fragment

方法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++;
            }

这有什么不对吗?

2 个答案:

答案 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