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

我在一个FragmentActivity与多个ListFragments一个viewPager。 为了填充不同的列表视图,我在装载器中获得LoaderManager和initiliaze。 我想为每个片段都有一个独特的LoaderManager,但是片段没有getSupportLoaderManager()方法,所以我需要调用父片段的活动:

getActivity().getSupportLoaderManager() 

这种方法的问题是我的Loaders id在不同的片段中彼此冲突。 如果在一个片段中已经有多个加载器ID,那么它会变得有点麻烦。 那么是否有办法为每个片段获取唯一的LoaderManager,而不是调用父级? 我基本上希望能够在多个片段上使用相同的ID。

谢谢

这将是一个太长的评论,但我在你的问题的评论中继续我们的讨论。

你应该采取相反的方式:活着的事实是,ID是一个活动的本地,而不是片段。

是的,碎片和活动之间的耦合很差。 大多数情况下,从片段callback将片段链接到一个活动(即使使用接口,它不是那么干净),并将参数从活动传递到片段:您必须使用静态工厂方法来构build片段并设置参数通过setArgs。

而你的问题是所有关于这样一个耦合问题:一个活动的每个片段中的加载器ID不应该重叠所有其他片段使用的ID。 这也是一个耦合约束,因为我们对位于活动级别的片段有一个约束。 你是对的,也许可以通过在片段级别引入装载器来解决Android的碎片。

尽pipe如此,可能有一些很好的方法来解决这个问题,并保留一个相对的解耦scheme。 例如,你可以创build一个ID的工厂,为碎片内的加载器生成“好”的ID,并防止重叠(id ++将是完美的):

 public interface IdFactory { public int createId(); } 

然后在每个片段里面,当你需要一个加载器时:

 this.newLoaderId = idFactory.createId(); 

工厂可以使用以下三种策略中的一种来共享所有碎片:

  • 一个单身人士 每个片段将通过访问IdFactory

    IdFactory idFactory = DefaultIdFactory.getInstance();

  • 创build一个实现IdFactory的类的单个实例,使该类的实例成为应用程序类中的数据字段并赋予它一个getter。 每个片段将能够使用它来访问它

    IdFactory idFactory =((MyApplication)getActivity()。getApplicationContext()).getIdFactory();

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

    IdFactory idFactory = getActivity()。getIdFactory(); //或IdFactory idFactory =(IdFactory)getActivity();

第三个select是更好的,因为它会按照你的确切需要,并将遵循活动的生命周期,让你的工厂垃圾收集。

还有其他的select,如使用RoboGuice或Dagger或任何其他dependency injection框架,但这是不太标准的。

是的,您可以使用: android.support.v4.app.Fragment.getLoaderManager()获取每个片段的唯一一个,这意味着您可以从零开始您的ID。