gpt4 book ai didi

android - 如何调用子 fragment 的 onResume() 而不是父 fragment 的 onResume()?

转载 作者:行者123 更新时间:2023-11-29 23:26:37 26 4
gpt4 key购买 nike

假设我有 3 个 FragmentBaseFragment,以及第一个 fragment 和第二个 fragment 。

我已经实现了 BaseFragmentonResume() 并编写了一段代码来设置宽度和高度,例如 -

public void onResume() {

super.onResume();
WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
params.width = RelativeLayout.LayoutParams.MATCH_PARENT;
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
getDialog().getWindow().setAttributes(params);

Log.d("upisdk", "basedialogfragment onresume()");
}

我有第一个 fragment ,其中我想将宽度设置为例如总宽度的 90%。我在这里也实现了 onResume() -

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

WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
params.width = (getWidth(getContext()) / 100) * 90;
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
getDialog().getWindow().setAttributes(params);

Log.d("upisdk", "onresume called on Changeddialogfragment");

}

SecondFragment 中,我想设置为 80%,就像上面的 Fragment 一样。

我的 onResume() 被调用了两次。一次用于 BaseFragment,另一次用于 FirstFragment

是否可以只调用第一个 fragment onResume 而不是父 fragment ?

最佳答案

is this possible to call only first fragment onResume and not the parent one?

不,这是不可能的。这是我在 fragment 中覆盖 onResume() 并删除带有 super.onResume();

的行时得到的结果

java.lang.RuntimeException: Unable to resume activity {com.example.mytestapp/com.example.mytestapp.MainActivity}: android.support.v4.app.SuperNotCalledException: Fragment MyTestFragment{4037a6b #0 id=0x7f090035 fragment} did not call through to super.onResume()

[...]

Caused by: android.support.v4.app.SuperNotCalledException: Fragment MyTestFragment{4037a6b #0 id=0x7f090035 fragment} did not call through to super.onResume()

但是你可以在 BaseFragment 中引入一个字段 protected int percent = x; 并让它对每个 有不同的值 x> fragment

您可以在 onResume() 之前调用的任何方法中设置此值,而不必调用其父类(super class)实现,例如在 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 不需要覆盖 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);
}

关于android - 如何调用子 fragment 的 onResume() 而不是父 fragment 的 onResume()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53452511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com