gpt4 book ai didi

android - 未调用子 fragment 的 setUserVisibleHint 和 onResume

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:01 26 4
gpt4 key购买 nike

当用户将页面切换到我的子 fragment 时,我试图调用一个函数。但是,当我尝试使用 setUserVisibleHint 和 onResume 时,这两个函数都是从我的父 fragment 中调用的。

enter image description here

首先,我在 Activity

中设置了一个 View 寻呼机

然后在 A1、A3 和 B1 中,我有 setUserVisibleHint 和 onResume 函数。

setUserVisibleHint 和 onResume 函数

@Override
public void setUserVisibleHint(boolean visible) {
super.setUserVisibleHint(visible);
Log.d("A1", "setUserVisibleHint"); // A3 for Fragment A3 and B1 for Fragment B1
if (visible && isResumed())
onResume();
}
@Override
public void onResume() {
super.onResume();
Log.d("A1", "onResume"); // A3 for Fragment A3 and B1 for Fragment B1
if (!getUserVisibleHint())
return;
}

问题:

当我从页面 A 单击页面 B 并且 View 是 Fragment B1 时,我得到(这没关系)

D/A1: setUserVisibleHint
D/B1: setUserVisibleHint
D/B1: onResume

当我从页面 B 单击页面 A 并且 View 是 fragment A1 时,我得到(这没关系)

D/B1: setUserVisibleHint
D/A1: setUserVisibleHint
D/A1: onResume

当我从页面 B 单击页面 A 并且 View 是 fragment A3 时,我得到(问题)

D/B1: setUserVisibleHint
D/A1: setUserVisibleHint
D/A1: onResume

我假设打印输出应该如下所示,但我不确定为什么父 fragment 调用函数。

D/B1: setUserVisibleHint
D/A3: setUserVisibleHint
D/A3: onResume

引用

从 fragment A1 -> A2,

A2 a2 = new A2();
getFragmentManager().beginTransaction().add(R.id.A1_frameChildFragment, a2)
.addToBackStack(null)
.commit();

从 fragment A2 -> A3,

A3 a3 = new A3();
getFragmentManager().beginTransaction().add(R.id.A2_frameChildFragment, a3)
.addToBackStack(null)
.commit();

最佳答案

onResume 当您在 ViewPager 中切换选项卡时,不会调用
setUserVisibleHint 当您在 ViewPager 之间切换时,将在每个选项卡的父级 fragment 中调用,而在子级中不会调用 fragment 。
这是默认行为,所以我认为我们无法更改它。

但是,有一个变通解决方案。它正在将可见提示从父 fragment 发送到子 fragment

// visible hint in parent fragment
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isAdded()) {
return;
}
Fragment fragment = getChildFragmentManager().findFragmentById(R.id.A1_frameChildFragment); // find current child fragment
if (fragment != null) {
fragment.setUserVisibleHint(isVisibleToUser); // send visible from parent to this child fragment
}
}

关于android - 未调用子 fragment 的 setUserVisibleHint 和 onResume,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157933/

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