大佬教程收集整理的这篇文章主要介绍了android – 如何检测片段是否被呈现或隐藏?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public void pushFragment(Fragment f) { getFragmentManager().begintransaction() .add(R.id.content_frame,f,null) .addToBACkStack(null) .commit(); }
我正在使用此代码弹出片段:
public void onBACkPressed() { if (getFragmentManager().getBACkStackEntryCount() > 1) { getFragmentManager().popBACkStack(); } else { super.onBACkPressed(); } }
我试图从片段类中检测它何时变得可见或隐藏(或者因为它从堆栈中弹出或者另一个片段被推到顶部).到目前为止,我已经尝试过这些回调:
> onViewCreated / onDestroyView:仅在将片段添加到堆栈并从堆栈弹出时调用.当片段由于堆栈上的其他片段而隐藏或可见时,不会调用.
> onHiddenChanged:从未打过电话.很多人都说过这样有效.但由于某种原因不适合我.
> setUservisibleHint:从未调用过
> onStart / onPause等:它们并不真正适用于此,因为它们只是反映了主机活动的生命周期.
是否有片段回调可以让我检测片段何时被显示或隐藏?我宁愿不使用BACkstack监听器,因为我希望每个片段类都有自己的show / hide逻辑.
编辑:
如果我使用replace()添加片段(而不是add()),那么之前显示的片段的视图将被销毁.因此,如果该片段再次出现在堆栈顶部,则会重新创建其视图.在这种情况下,每次显示或隐藏片段时都会调用onViewCreated / onDestroyView或onStart / onStop.我想我可以使用这种方法.缺点是视图经常被创建和销毁.在这种情况下,我不妨使用活动而不是片段来进行主细节导航.
public void onHiddenChanged(Boolean hidden) { if(hidden){// Do you stuff herE} }
正如PPartisan所提到的那样,你声称永远不会调用onHiddenChanged.
原因是因为onHiddenChanged在第一次显示片段时没有被调用.
Fragmenttransaction mFragmenttransaction = getFragmentManager().begintransaction(); if (f!= null) { mFragmenttransaction .hide(f); } mFragmenttransaction.add(R.id.content_frame,null) mFragmenttransaction.addToBACkStack(null) mFragmenttransaction.commit();
以上是大佬教程为你收集整理的android – 如何检测片段是否被呈现或隐藏?全部内容,希望文章能够帮你解决android – 如何检测片段是否被呈现或隐藏?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。