如何知道碎片出现在屏幕上[不在PagerAdapter]?

时间:2016-12-17 06:38:04

标签: android fragment visibility

我无法确定Fragment实际出现在屏幕上的时间,并在其他Fragment替换它时隐藏。意味着我需要知道可以提供帮助的方法。

到目前为止,我尝试了以下方法。这些方法甚至都没有调用。因为我没有在Fragments内使用PagerAdaper(根据SO答案)。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
}

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
}

@Override
public void setMenuVisibility(boolean menuVisible) {
    super.setMenuVisibility(menuVisible);
}

最后我尝试了

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}

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

他们都在打电话,但问题是onDetach在第二个片段onAttach之后调用。

所以不知怎的,我什么都没有。

感谢阅读!

3 个答案:

答案 0 :(得分:1)

在firstFragment上使用onDetach,在第二个片段上使用onActivityCreated。

答案 1 :(得分:0)

可能是下面的方法是帮助你的。它在视图可见后调用。

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

尝试以下代码隐藏片段。

final Fragment hideFragment = getFragmentManager().findFragmentById(R.id.container);
        getFragmentManager()
                .beginTransaction()
                .add(R.id.container, fragment, fragment.getClass().getSimpleName())
                **.hide(hideFragment)**
                .addToBackStack(hideFragment.getClass().getSimpleName())
                .commit();

当你使用.hide方法时,下面的方法肯定会调用。

@Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
    } 

答案 2 :(得分:0)

您可以使用isHidden()了解Fragment生命周期回调中当前状态的显示。

状态也将在onHiddenChange(boolean)方法中调用。当附加片段时,其默认状态为 SHOW ,因此如果您希望调用onHiddenChange(boolean),前提是您在使用事务时应明确调用show()/hide()

如下: getSupportFragmentManager().benginTranscation.add(...).show().commit();