2014-02-17 2 views
0

Как каждый разработчик Android знает, каждый раз, когда вы создаете пользовательский Fragment, вы не должны использовать его конструктор, как говорится в документации. Таким образом, способ сделать это больше похоже на следующее:Почему Fragment создан методом фабрики?

public static BlankFragment newInstance(String param1, String param2) { 
    BlankFragment fragment = new BlankFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 
public BlankFragment() { 
    // Required empty public constructor 
} 

Есть ли конкретная причина для Fragment быть обработан с помощью фабричного метода?

+0

Просто связывая функциональность, связанную с объектом внутри этого самого класса. Вы даже можете поставить это снаружи. – Triode

ответ

1

Таким образом, вы можете сохранить весь свой код инициализации в одном месте, фрагменты часто используются во многих действиях, поэтому такой заводский метод гарантирует, что вы не пропустите новый добавленный параметр.

На самом деле вы можете добавить конструктор к своему фрагменту и перенести на него свой новый кодInstance. Проблема в том, что андроид не будет использовать его во время отдыха фрагмента, поэтому такой конструктор может смутить некоторых кодеров.

С другой стороны, если вы хотите создать параметр less newInstance() фабричный метод, который будет использовать setArguments с некоторым значением init, то вы не можете изменить его на версию конструктора, потому что андроид вызовет ваш параметр less constructor во время фрагмент отдыха.

вы можете прочитать некоторые больше здесь:

http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html

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