我试图避免更新不可见的嵌套片段。
我的应用在Fragments
中有三页嵌套FragmentPagerAdapter
。如果重要的话,那里也有TabLayout。它是一个网络客户端,通信线程更新数据库,并定期向UI发送更新。
为了适应这样一个事实,即每个片段都有很多片段,每个片段都关注数据模型的不同方面,每个片段都实现了IWantUpdatesForDataType
行的接口,并通过comm线程注册自己,因此:
class CommThread
public HashSet<IWantStatus> statusWanters = new HashSet<IWantStatus>();
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() ) {
// Update my cursor adapter, etc.
}
}
}
这是我的第一个分页,碎片应用程序,所以我可能无法很好地掌握嵌套的工作原理。也就是说,实现StatusFragment.isVisible()对于我知道将成为FragmentPagerAdapter
中的根视图的片段并不困难。 This answer最适合我尝试过的。
问题是StatusFragment可能是子片段。在这种情况下,似乎没有什么简单的工作。鉴于片段应该是自包含和可重复使用的,因此需要关注片段(假设的)父可见性,this answer(总是返回true)似乎是错误的。无论如何我的寻呼机。)
片段如何确定自己的可见性,而不关心它是否是子片段或根片段?