【问题标题】:Inject adapter into activity将适配器注入活动
【发布时间】:2014-08-03 13:07:48
【问题描述】:

我正在学习如何使用 RoboGuice(以及一般的依赖注入)。我遇到的问题是我想将自定义 FragmentPagerAdapter 注入活动,但我需要以某种方式传递 FragmentManager。有没有办法做到这一点?在文档中,它们提供了一种传递上下文的方法,但我需要传递 FragmentManager - 我需要以同样的方式吗?

【问题讨论】:

    标签: android android-fragments dependency-injection guice roboguice


    【解决方案1】:

    对于匕首:

    使用Activity.getFragmentManager() 在特定于活动的子图 中定义FragmentManager 的绑定。然后将FragmentManager注入FragmentPagerAdapter,将FragmentPagerAdapter注入Activity。

    public class ActivityModule {
    
      private final Activity activity;
    
      public ActivityModule(Activity activity) {
        this.activity = activity;
      }
    
      @Provides
      public Activity getActivity() {
        return activity;
      }
    
      @Provides
      FragmentManager provideFragmentManager(Activity activity) {
        return activity.getFragmentManager();
      }
    }
    

    【讨论】:

    • 这个问题不是关于 Dagger 的吗?
    • 我希望 RoboGuice 中存在等价的概念;我只有Dagger的经验。无论您的 DI 框架如何,解决方案都是将 FragmentPagerAdapter 注入到 Activity 中,将 FragmentManager 注入到 FragmentPagerAdapter 中,并且该 FragmentManager 的绑定应限定为 Activity(即特定于活动的子图)。
    • @jimmyorr 我切换到 Dagger 进行检查,但使用您的解决方案我仍然得到 Error:(24, 8) Gradle: error: No injectionable members on android.support.v4.app.FragmentManager .你想添加一个可注入的构造函数吗? com.example.app.adapter.TabsPagerAdapter 需要 com.example.app.AppModule
    【解决方案2】:

    看起来你可以直接注入Activity。然后你应该可以打电话给activity.getFragmentManager()。或者,如果您正在使用支持库,((FragmentActivity) activity).getSupportFragmentManager()。

    【讨论】:

    • 那我该怎么做呢?我是否将 Provider 作为参数传递给适配器的构造函数并自动实例化?
    • 不管你是在注入一个Context,还是为Activity做理智的事情。
    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多