如何仅更新可见的子片段?

9 浏览
0 Comments

如何仅更新可见的子片段?

我正在尝试避免更新不可见的嵌套片段。

我的应用程序在FragmentPagerAdapter中有三个页面的嵌套片段。如果有必要的话,还有一个TabLayout。这是一个网络客户端,通信线程会更新数据库,并定期向UI发送更新。

为了适应有很多片段的情况,每个片段都实现了一个类似IWantUpdatesForDataType的接口,并在通信线程中注册自己,如下所示:

class CommThread {
    public HashSet statusWanters = 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)。

片段如何确定自己的可见性,同时不关心它是子片段还是根片段?

0