2015-10-26 3 views
-3

Метод 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++; 
      } 

Ничего плохого в этом?

+3

Первый представляет собой статический метод завода – Blackbelt

ответ

1

Смелее с Method 1. Всегда старайтесь использовать Static Factory Methods над Constructors. Почему вы должны использовать это, можно найти в знаменитой книге Effective Java Джошуа Блох: Пункт 1 - Статический метод фабрики.

Также Вы можете обратиться: Effective Java By Joshua Bloch: Item1 - Static Factory Method

+0

Я зацикливаю фрагменты и добавляю в «Список fragments = new ArrayList <>();' если он статичен, то память не будет освобождена, когда уничтожит действие? – Christ

+0

Я отредактировал вопрос .. – Christ

+1

Это статический метод для создания объекта Фрагмент. Это все. Таким образом, это не приведет к какой-либо проблеме с памятью. Объект Fragment не будет иметь ссылки внутри этого метода. Просьба прочитать «Пункт 1» в «Эффективной Java». – Henry

2

Метод 1 будет предпочтительнее метод 2.

Это потому, что в методе 1 вы действительно создать MyFragment объект. В методе 2 вы сначала создаете объект MyFragment, а затем инициализируете его newInstance(...). Если вы хотите использовать метод 2 я бы предложил сделать это в 2-х направлениях:

MyFragment frag = new MyFragment(); 
frag.initialize(1); 

с помощью метода инициализации:

public void initialize(int index) { 
    Bundle args = new Bundle(1); 
    args.putInt("index", index); 
    setArguments(args); 
} 
+0

Plz сказать me..Wat неправильный с кодом в методе 2 я написал в моем qustion ??. – Christ

+0

хорошо это легко: вы уже создали новый экземпляр с 'new MyFragment()'. После этого вы используете метод под названием 'newInstance()'. что подразумевает, что он создает (другой) новый экземпляр, которого нет! Неплохо, что вы там делаете, но это нехорошо или обычный способ сделать это! –

+0

Thanku parker .. – Christ

Смежные вопросы