Подтвердить что ты не робот

Какой смысл 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 в первую очередь? Не могли бы вы просто использовать сеттеры и геттеры?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

public void setArguments (Bundle args)

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

Fragments.setArguments(Bundle args)

Ответ 4

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

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

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