如何仅更新可见的子片段?
如何仅更新可见的子片段?
我正在尝试避免更新不可见的嵌套片段。
我的应用程序在FragmentPagerAdapter中有三个页面的嵌套片段。如果有必要的话,还有一个TabLayout。这是一个网络客户端,通信线程会更新数据库,并定期向UI发送更新。
为了适应有很多片段的情况,每个片段都实现了一个类似IWantUpdatesForDataType的接口,并在通信线程中注册自己,如下所示:
class CommThread { public HashSetstatusWanters = new HashSet (); interface IWantStatus { public void updateStatus(); } public void notifyStatusChange() { for( IWantStatus wanter : statusWanters ) { wanter.updateStatus(); } } } class StatusFragment implements CommThread.IWantStatus { @Override onCreate() { commThread.statusWanters.add(this); } @Override updateSales() { if( isVisible() ) { // 更新我的cursor适配器等。 } } }
这是我第一个分页的、片段化的应用程序,所以我可能对嵌套的工作原理没有很好的掌握。尽管如此,对于我知道将是FragmentPagerAdapter的根视图的片段来说,实现StatusFragment.isVisible()并不困难。这个答案是我尝试过的最好的答案。
问题是当StatusFragment可能是子片段时。在这种情况下,似乎没有什么简单的方法可行。鉴于片段应该是自包含和可重用的,需要关心片段的(假设的)父级可见性似乎是错误的,如此答案所示(在我的pager中总是返回true)。
片段如何确定自己的可见性,同时不关心它是子片段还是根片段?