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

时间:2016-06-03 19:39:14

标签: android-fragments

我试图避免更新不可见的嵌套片段。

我的应用在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)似乎是错误的。无论如何我的寻呼机。)

片段如何确定自己的可见性,而不关心它是否是子片段或根片段?

0 个答案:

没有答案