В чем смысл setArguments?

Привет, я смотрел следующий пример фрагментов на сайте Android.

http://developer.android.com/guide/components/fragments.html#Example

Я хотел бы знать, почему определенные методы выполняются.

Почему, например, в detailsFragment используется следующий метод:

 public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } 

Не могли бы вы также просто создать экземпляр DetailsFragment и использовать метод setter для установки index . Обход всего setArguments .

В чем смысл использования setArguments в первую очередь? Не могли бы вы просто использовать сеттеры и геттеры?

Solutions Collecting From Web of "В чем смысл setArguments?"

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

По сути, setArguments и getArguments – это всего лишь шаблон дизайна, который Google предлагает вам:

Каждый фрагмент должен иметь пустой конструктор, поэтому он может быть создан при восстановлении состояния своей активности. Настоятельно рекомендуется, чтобы подклассы не имели других конструкторов с параметрами, так как эти конструкторы не будут вызываться, когда фрагмент будет повторно создан; Вместо этого аргументы могут предоставляться вызывающим абонентом с помощью setArguments (Bundle), а затем извлекаются фрагментом с помощью getArguments (). http://developer.android.com/reference/android/app/Fragment.html

Я полагаю, что включить сеттеры, которые необходимы для работы вашего Фрагмента. Опять же – нет ничего, что заставило бы вас сделать это таким образом, и, как вы знаете, это не единственный способ сделать работу.

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

Хорошо использовать геттеры и сеттеры, но поскольку структура может уничтожить и воссоздать ваш фрагмент, вы должны не потерять эти параметры.

Это должно быть сделано через Fragment.onSaveInstanceState() . Сохраненные данные будут переданы вам как параметр savedInstanceState в Fragment.onCreate() , Fragment.onCreateView() и несколько других методов.

Использование Fragment.setArguments() (в большинстве случаев, я предполагаю) проще, в рамках структуры автоматически сохраняются аргументы и, таким образом, будут выполнять большую часть работы для вас.

Сеттерс может быть способом для параметров, которые вы первоначально поставляете в Фрагмент и которые фрагмент может корректировать со временем. В этом случае справиться с самим savedInstanceState может быть проще, чем иметь дело с savedInstanceState и аргументами – где вам нужно принять решение, которое является допустимым параметром.

 public void setArguments (Bundle args) 

Поставьте аргументы конструкции для этого фрагмента. Это может быть вызвано только до того, как фрагмент был привязан к его активности; То есть вы должны вызвать его сразу после создания фрагмента. Аргументы, предоставленные здесь, будут сохраняться через уничтожение и создание фрагментов (может быть, текст, выделенный полужирным шрифтом, отсутствовал в официальной документации ранее)

Fragments.setArguments (Bundle args)

Кроме того, сеттеры могут быть использованы неправильно. Если updateSomeOtherStuff () изменит некоторые представления, это приведет к сбою.

 public class MyFragment extends Fragment { void setData(someData){ this.someData = someData; updateSomeOtherStuff() } } 

Если кто-то проходит в комплекте, невозможно использовать злоумышленник, и вы всегда будете знать, что это будет установлено в методах жизненного цикла.