为什么,当我们测试片段是否可见时,我们是否测试片段是否为空?

时间:2017-09-16 00:09:23

标签: android android-fragments

为什么,当我们测试片段是否可见时,我们是否测试片段是否为空?

FragmentB f2 = (FragmentB) manager.findFragmenrById(R.id.fragB);

if(f2 != null && f2.isVisible())
{
 // landscape

}else
{
   //portrait

}

3 个答案:

答案 0 :(得分:2)

在片段代码中尝试此操作。

@Override  
public void setUserVisibleHint(boolean isVisibleToUser) {  
    super.setUserVisibleHint(isVisibleToUser);  
    if (isVisibleToUser) {  
        // visible
    } else {  
        // invisible 
    }  
}  

并且这样做。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
        // Visible
    } else {
        // Invisible
    }
}

答案 1 :(得分:0)

启动片段时,像这样添加一个标记:

MyFragmentClass myFragment = new MyFragmentClass();
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.main_container, myFragment, "MY_FRAG");

然后你想看看它是否可见:

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("MY_FRAG");

if (test != null && test.isVisible()) {
  //DO STUFF
} 
else {
  //Whatever
}

答案 2 :(得分:0)

如果特定片段可见或不可见,则仅由该片段保证。如果片段需要关于它的另一个组件,它应该进行线程间通信。

片段是独立的动态组件,如OS的线程。片段在完成onStart()回调体后变得可见。

1)您可以在完成onStart()正文后检查片段在Fragment类中是否可见。例如,您可以查看

onClickofView() { //check your above written code here
/*Note: Since you are inside the fragment, you don't need to check if the fragment is null or not? */
}

2)如果要从外部空间(来自另一个片段或活动)检查特定片段是否为空,则需要进行线程间通信。为此,在完成onStart()之后,在片段中使用通知工作线程。来自任何地方的另一个线程获取该消息,并可以检查片段是否可见?另一个线程可以在Activity中,您可以使用 FragmentManager.beginTransaction() 异步启动这么多片段。