如何知道屏幕上显示的片段[不在PagerAdapter中]?

问题描述:

我很难找出Fragment实际显示在屏幕上的情况,并在其他Fragment替换它时隐藏。意味着我需要知道可以提供帮助的方法。如何知道屏幕上显示的片段[不在PagerAdapter中]?

到目前为止,我已尝试使用以下方法。这些方法甚至没有调用。原因我不使用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

所以不知何故,我什么都没有结束。

感谢您的阅读!

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

@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); 
    } 
+0

要知道'Show'状态是好的,但隐藏状态呢? –

+0

如果你使用transaction.add()和transaction.hide()方法,然后确定@Override public void onHiddenChanged(boolean hidden){ super.onHiddenChanged(hidden); } 这个方法会调用。 –

您可以使用isHidden()知道目前的状态在Fragment生命周期回调的显示。

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

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

使用onDetach上firstFragment和onActivityCreated上第二片段。

+0

漂亮!但问题是'onStop'在下一个'Fragment的onAttach'方法之后被调用。 –

+0

在第一个片段上使用onDetach,在第二个片段上使用onActivityCreated .. onActivityCreated将在第一个片段分离后调用。 –

+0

试试这个。它会帮助.. –