Почему не рекомендуется передавать объект во фрагмент с помощью простого метода получения

Я новичок в Android, мне интересно, почему этот простой метод для передачи параметров не рекомендуется.

class DemoFragment extends Fragment{
    private MyObject myObject;
    public void setMyObject(MyObject myObject){
        this.myObject = myObject;
    }
}

DemoFragment fragmentDemo = new DemoFragment();
fragmentDemo.setMyObject(myObject);

2 ответа

Решение

Механизм, который Android предоставляет для передачи параметров фрагментам, использует пакеты, что является той же техникой при передаче данных между действиями и действиями.

Создавая свой фрагмент, назовите его setArguments(Bundle bundle) метод с желаемыми значениями ключа, которые вы хотите.

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

Использование геттеров и сеттеров обычно не является плохой практикой, но вам лучше извлечь максимум из нативных API, прежде чем пытаться заново изобрести колесо.

Зачем использовать Bundles вместо простых сеттеров?

При повороте экрана устройства (он же "изменение ориентации" или "изменение конфигурации") фрагмент DemoFragment уничтожен, а затем воссоздан на Android. Так что содержание DemoFragment.myObject теряется после вращения, если подается через сеттер.

Неинтуитивная информация "Связки" не теряется после поворота экрана. Когда DemoFragment воссоздается, он снова получает данные из пакета, поэтому DemoFragment.myObject снова заполняется обязательным параметром.

Для получения дополнительной информации см. https://developer.android.com/training/basics/activity-lifecycle/index.html

Если не имеет значения, что член класса теряется после "поворота экрана", тогда сеттеры в порядке.

Другие вопросы по тегам