我有一个viewpager,当然还有一些片段。每个片段都将CoordinatorLayout作为父级。
我正在展示一些小吃吧。问题是,如果片段A显示一个小吃吧它很好,但如果它的相邻片段B也显示一个小吃店,片段A中的小吃栏会自动隐藏。
由于viewpager相邻片段已预加载,因此它是一个明显的问题。任何解决方法?或者我做错了吗?
答案 0 :(得分:3)
ViewPager
中的多个片段中的snackbar存在一些问题1)如果快餐栏显示在片段A(可见)和片段B(不可见)上,则两个小吃栏都不可见。
2)如果我使用@Override setUserVisibleHint和getUserVisibleHint()的组合来根据片段可见性巧妙地显示和隐藏零食栏,它只能在第一次工作。之后,调用snackbar.show()无法再显示小吃店(除非我重新创建小吃店)。
以下是我提出的解决方案(使用v23.1.1测试):
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
答案 1 :(得分:2)
您可以使用 setUserVisibleHint(boolean isVisible)更新片段可见性(例如在ViewPager onPageSelected上),然后在片段上 getUserVisibleHint(),以便仅在片段可见时显示Snackbar
让我们说你有片段A,B&amp; ç
片段A是可见的,Snackbar也是如此 如果Fragment B或C试图打开Snackbar,getUserVisibleHint()将返回false并且它们不会陷入Fragment A Snackbar。
<强> OB的。使用FragmentStatePagerAdapter执行此操作时要小心,因为您可以让NPE保持对Fragments的引用并在此引用上调用setUserVisibleHint()。
编辑:您不需要setUserVisibleHint(),因为系统已经调用了它。