Переопределение onResume в классе Fragment

216
27 августа 2017, 03:06

Есть BefFragment extends DialogFragment, в котором переопределен метод onResume

@Override
public void onResume() {
    super.onResume();
    int userDisplayWidth = getActivity().getResources().getDisplayMetrics().widthPixels;
    int userDisplayHeight = getActivity().getResources().getDisplayMetrics().heightPixels;
    int width = Constants.BEF_WIDTH *userDisplayWidth/ Constants.DISPLAY_WIDTH;
    int height = Constants.BEF_HEIGHT *userDisplayHeight/ Constants.DISPLAY_HEIGHT;
    getDialog().getWindow().setLayout(width, height);
}

Есть class Fragment extends BefFragment , в котором метод onResume должен быть таким, как в классе DialogFragment, а не таким, как в классе BefFragment, т.е. в это методе не должны изменяться параметры контейнера диалога (ширина и высота). Как это сделать?

Пробовала переопределить в классе Fragment метод onResume так:

@Override
public void onResume() {
    super.onResume();
}

проблема не решена.

Дело в том, что класс BefFragment и класс Fragment используют один и тот же layout-ресурс для разметки, но в первом случае layout занимает почти весь экран, а во втором встроен в активити, где занимает 1/10 экрана. И, если метод onResume в классе BefFragment не переопределять, тогда окно BefFragment слишком большое и не помещается на экран, а, если переопределить и рассчитать размеры контейнера для фрагмента, как я написала, то тогда возникает проблема с формированием layout, который содержит экземпляры класса Fragment: ошибка NullPointerException со ссылкой на строку

getDialog().getWindow().setLayout(width, height);

в BefFragment и на super.onResume(); в самом Fragment.

Answer 1

Заведите метод-флаг (возвращает boolean) внутри BefFragment с дефолтным значением, например, true, который Вы переопределите внутри Fragment и станете возвращать значение false. Внутри метода onResume в BefFragment делайте проверку. Должно получиться примерно это:

BefFragment

protected boolean checkPassed() { //примерное название метода
    return true;
}
@Override
public void onResume() {
    super.onResume();
    if (checkPassed()) {
        // тут ваш код
    }
}

Fragment

@Override
protected boolean checkPassed() {
    return false;
}
READ ALSO
Вопрос по наследованию

Вопрос по наследованию

Пытаюсь разобраться с работой RecyclerViewAdapter в связке с CursorLoader

294
база данных не удаляет запись

база данных не удаляет запись

Удаляю запись с базы данных таким образом (по id):

204
Метод add в собственной коллекции

Метод add в собственной коллекции

Размер коллекции после инициализации меняться не можетПосле того как количество элементов достигло максимума-при добавлении нового элемента...

240
Firebase. Сделать значение переменной

Firebase. Сделать значение переменной

Как значение в базе данных Firebase сделать переменной в андроид чтобы сравнить значения?

258