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

android - 子 fragment 的setUserVisibleHint和onResume不被调用-LMLPHP

首先,我在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
    }
}

10-07 19:46
查看更多