возможно ли вызвать только первый фрагмент onResume, а не родительский?
Нет, это невозможно.Это то, что я получаю, когда переопределяю onResume()
во фрагменте и удаляю строку с super.onResume();
java.lang.RuntimeException: Невозможно возобновить действие {com.example.mytestapp / com.example.mytestapp.MainActivity}: android.support.v4.app.SuperNotCalledException: Fragment MyTestFragment {4037a6b # 0 id = 0x7f090035 фрагмент} не обращался к super.onResume ()
[...]
Причина: android.support.v4.app.SuperNotCalledException: фрагмент MyTestFragment {4037a6b # 0 id = 0x7f090035 фрагмента} не обращался к super.onResume ()
Но вы можете ввести поле protected int percent = x;
в BaseFragment
и дать ему другое значение x для каждого Fragment
.
Вы можете установить это значение в любом методе, который вызывается до onResume()
и не должен вызывать его реализацию суперкласса, например, в onCreateView()
.
Или вы вводите свой собственный метод и вызываете его, например, из onCreate()
Например, для родительского класса:
protected void setPercent(){
percent = 100;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setPercent();
}
В то время как в первом Fragment
,вы пишете
@Override
protected void setPercent(){
percent = 90;
}
Тогда дочерним Fragment
s не нужно переопределять onResume()
, и родительский класс может правильно установить LayoutParams
:
public void onResume() {
super.onResume();
WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
params.width = (getWidth(getContext()) * percent / 100);
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
getDialog().getWindow().setAttributes(params);
}