1

我使用Dagger 2注入了一個無上下文的適配器,它正在工作,但是當我傳遞上下文參數時,我無法做到這一點。錯誤來了這樣使用匕首將上下文或活動傳遞給適配器2

error: android.content.Context cannot be provided without an @Provides-annotated method. 

匕首組件

@PerActivity 
@Component(dependencies = ApplicationComponent.class, modules = MainFragmentModule.class) 
public interface MainFragmentComponent { 

    void inject(MainFragment mainFragment); 

    @ActivityContext 
    Context provideContext(); 
} 

片段模塊

@Module 
public class MainFragmentModule { 

    private MainFragmentContract.View mView; 
    private Activity mActivity; 
    Context mContext; 

    MainFragmentModule(MainFragmentContract.View view, Context context) { 
     mView = view; 
     mContext = context; 
    } 

    @Provides 
    MainFragmentContract.View providesView() { 
     return mView; 
    } 

    @Provides 
    @ActivityContext 
    Context provideContext() { 
     return mContext; 
    } 


} 

適配器

@Inject 
    public ConversationAdapter(MainFragmentPresenter mainPresenter, Context context) { 
     mMainFragmentPresenter = mainPresenter; 
     mContext =context; 
    } 
+0

您可以添加(?活動)的代碼,在使用的適配器?在這個類中包含Dagger初始化。 – Christopher

+0

我無法添加片段代碼...當我點擊保存時發生錯誤。 – Jarvis

+0

DaggerMainFragmentComponent.builder()。applicationComponent(((QTConnectApp)getActivity()。getApplication())。getComponent()) .mainFragmentModule(new MainFragmentModule(this,getContext())) .build().injection(this) ; – Jarvis

回答

4

你告訴匕首,你所提供的是特定的上下文:

@ActivityContext 
Context provideContext(); 

然後,您要求匕首將您的適配器注入另一種類型的上下文 - 其中一個不帶註釋的@ActivityContext

相反,你應該明確定義,你是願意提供正是類型的上下文:

 

    @Inject 
    public ConversationAdapter(..., @ActivityContext Context context) { 
     ... 
    } 
 
+0

謝謝..其完成,請幫助我,如果想傳遞活動而不是上下文。 – Jarvis

相關問題