getSupportLoaderManager()在不同片段中使用相同的ID



我正在用多个列表范围的片段行为制作一个viewpager。为了填充不同的listViews,我在加载程序中获得了LoaderManager和initeiliaze。我想为每个片段有一个唯一的loaderManager,但是,片段没有getupportloadermanager()方法,因此我需要调用父片片段活动:

getActivity().getSupportLoaderManager()

这种方法的问题是,我的加载器ID中的不同片段中的ID相互冲突。当您在一个片段中拥有多个加载程序ID时,它可能会变得有些麻烦。因此,是否有一种方法可以为每个片段获得一个唯一的LoaderManager,而不是打电话给父母?我基本上希望能够在多个片段上使用相同的ID。

谢谢

是的,您可以使用:android.support.v4.app.fragment.getloadermanager() 要为每个片段获得一个唯一的片段,这意味着您可以从零启动ID。

这将是太长时间的评论,但是我在您的问题的评论中继续讨论。

您应该以相反的方式采取它:与ID是一项活动的本地,而不是片段的事实。

是的,碎片和活动之间的耦合差。主要是从片段回电将片段链接到活动(即使使用接口也不干净),并且要将参数从活动传递到片段:您必须使用静态出厂方法来构建片段并设置其参数通过setargs。

您的问题就是关于这样一个耦合问题的全部内容:活动的每个片段中的加载器ID不应与所有其他片段使用的ID重叠。这也是一个耦合约束,因为我们对活动级别的碎片有限制。您是对的,这可能是通过向碎片引入本地装载器来在片段级别解决的。

尽管如此,可能有一些优雅的方法来解决这个问题并保留相对的脱耦合方案。例如,您可以创建一个ID工厂,该工厂将为片段中的加载器生成"好" ID并防止重叠(ID 是完美的):

public interface IdFactory {
   public int createId();
}

然后在每个片段内,当您需要装载器时:

this.newLoaderId = idFactory.createId();

使用三种策略之一,所有片段都可以共享工厂:

  • 单身人士。每个片段将通过

    访问IDFACTORY

    idFactory IDFactory = DefaultIdFactory.getInstance();

  • 创建一个实现IDFACTORY的类的单个实例,使应用程序类中的该类数据字段的该实例给它一个Getter。每个片段将能够使用

    访问它

    idFactory idFactory =(((myapplication)getActivity()。getApplicationContext()).getIdFactory();

  • 在活动级别创建您的工厂。任何一个活动都可以实现IDFACTORY接口,也可以提供内部类来完成。然后,每个片段将使用:

    访问工厂

    idFactory IDFactory = getActivity()。getIdFactory();//或者 IDFactory IDFactory =(idFactory)getActivity();

第三种选择越好,因为它将遵循您的确切需求,并将遵循活动生命周期,使您的工厂收集到垃圾。

还有其他选项,例如使用机器人或dagger或任何其他依赖注入框架,但这是不标准的。

最新更新