为什么,当我们测试片段是否可见时,我们是否测试片段是否为空?
FragmentB f2 = (FragmentB) manager.findFragmenrById(R.id.fragB);
if(f2 != null && f2.isVisible())
{
// landscape
}else
{
//portrait
}
答案 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()
异步启动这么多片段。