Могу ли я использовать сеттеры для связки при создании нового фрагмента - PullRequest
0 голосов
/ 10 января 2019

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

public static MyFragment newInstance() {
    MyFragment frag = new MyFragment();
    Bundle args = new Bundle();
    args.putInt("lifesAnswer", 42);
    frag.setArguments(args);
    return frag;
}

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

А что если я использовал здесь интерфейс фрагментов, чтобы установить произвольное значение, которое можно передать в newInstance() в качестве параметра. Например:

public static MyFragment newInstance(int someValue) {
    MyFragment frag = new MyFragment();
    frag.setInstanceValue(someValue); // using a public setter
    return frag;
}

для ясности, setInstanceValue() - это просто ваш стандартный сеттер, например:

public void setInstanceValue(int value) {
    this.value = value;
}

Является ли этот подход совершенно законным и безопасным? Для практического контекста здесь у меня есть фрагмент, который будет многократно использоваться в окне просмотра, и все, что отличается от него, - это некоторый текст и фоновое изображение контейнеров. Я мог бы просто передать разрешенные целочисленные значения и установить их в пакете, например, передав R.String.my_string, затем установить его в пакете и использовать позже, но это заставило меня задуматься. Допустимо ли применять второй подход или я всегда должен использовать первый подход.

1 Ответ

0 голосов
/ 10 января 2019

Вы можете сделать что-то подобное:

class YourFragment extends Fragment {

String valueOne;

String valueTwo;

public static YourFragment create(String valueOne, String valueTwo) {
    YourFragment fragment = new YourFragment();
    fragment.valueOne = valueOne;
    fragment.valueTwo = valueTwo;
    return fragment;
}

}

Здесь нет необходимости использовать сеттеры.

Или используйте библиотеку FragmentArgs https://github.com/sockeqwe/fragmentargs.

...