How to inject a ViewModel into BottomSheetDialogFragment with Dagger2?
I inject my dependencies in Activities and Fragments on the preferred way with AndroidInjection.inject(this)
. I have the recommended ViewmodelFactory to inject the viewmodel. My injections are working in Activities and Fragments. However I face a problem with BottomSheetDialogFragment, because I am not allowed to specify BottomSheetDialogFragment as this
. So my @Inject lateinit var viewModelFactory: ViewModelFactory
is not initialized. I believe that injection should be possible because the BottomSheetDialogFragment should be subclass of the Fragment class, but it looks like it is not. I use android.x which I believe can cause also problem. Is that possible that it is not supported by Dagger yet?
What way should I implement my ViewModelFactory injection?
Update: When I try to inject a fragment with AndroidInjection.inject(this)
, it is not possible either with the androidx.fragment.app.Fragment
only with android.app.Fragement
. I extend my Fragments with DaggerFragment
and they work as expected.
android dagger-2 bottom-sheet
add a comment |
I inject my dependencies in Activities and Fragments on the preferred way with AndroidInjection.inject(this)
. I have the recommended ViewmodelFactory to inject the viewmodel. My injections are working in Activities and Fragments. However I face a problem with BottomSheetDialogFragment, because I am not allowed to specify BottomSheetDialogFragment as this
. So my @Inject lateinit var viewModelFactory: ViewModelFactory
is not initialized. I believe that injection should be possible because the BottomSheetDialogFragment should be subclass of the Fragment class, but it looks like it is not. I use android.x which I believe can cause also problem. Is that possible that it is not supported by Dagger yet?
What way should I implement my ViewModelFactory injection?
Update: When I try to inject a fragment with AndroidInjection.inject(this)
, it is not possible either with the androidx.fragment.app.Fragment
only with android.app.Fragement
. I extend my Fragments with DaggerFragment
and they work as expected.
android dagger-2 bottom-sheet
add a comment |
I inject my dependencies in Activities and Fragments on the preferred way with AndroidInjection.inject(this)
. I have the recommended ViewmodelFactory to inject the viewmodel. My injections are working in Activities and Fragments. However I face a problem with BottomSheetDialogFragment, because I am not allowed to specify BottomSheetDialogFragment as this
. So my @Inject lateinit var viewModelFactory: ViewModelFactory
is not initialized. I believe that injection should be possible because the BottomSheetDialogFragment should be subclass of the Fragment class, but it looks like it is not. I use android.x which I believe can cause also problem. Is that possible that it is not supported by Dagger yet?
What way should I implement my ViewModelFactory injection?
Update: When I try to inject a fragment with AndroidInjection.inject(this)
, it is not possible either with the androidx.fragment.app.Fragment
only with android.app.Fragement
. I extend my Fragments with DaggerFragment
and they work as expected.
android dagger-2 bottom-sheet
I inject my dependencies in Activities and Fragments on the preferred way with AndroidInjection.inject(this)
. I have the recommended ViewmodelFactory to inject the viewmodel. My injections are working in Activities and Fragments. However I face a problem with BottomSheetDialogFragment, because I am not allowed to specify BottomSheetDialogFragment as this
. So my @Inject lateinit var viewModelFactory: ViewModelFactory
is not initialized. I believe that injection should be possible because the BottomSheetDialogFragment should be subclass of the Fragment class, but it looks like it is not. I use android.x which I believe can cause also problem. Is that possible that it is not supported by Dagger yet?
What way should I implement my ViewModelFactory injection?
Update: When I try to inject a fragment with AndroidInjection.inject(this)
, it is not possible either with the androidx.fragment.app.Fragment
only with android.app.Fragement
. I extend my Fragments with DaggerFragment
and they work as expected.
android dagger-2 bottom-sheet
android dagger-2 bottom-sheet
edited Nov 28 '18 at 15:20
codeme
asked Nov 28 '18 at 11:09
codemecodeme
149111
149111
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Here is how I have provided ViewModel into BottomSheetDialogFragment().
First of all set up Dagger in MyApp class.
class MyApp : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
initDagger()
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
override fun supportFragmentInjector(): AndroidInjector<Fragment> = supportFragmentInjector
private fun initDagger(){
DaggerAppComponent
.builder()
.application(this)
.build()
.injectApp(this)
}
Then AppComponent class
@Singleton
@Component(
modules = [
AppModule::class,
UiModule::class,
AndroidSupportInjectionModule::class,
AndroidInjectionModule::class
])interface AppComponent : AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApp): Builder
fun build(): AppComponent
}
fun injectApp(app: MyApp)
}
Here we interested in UiModule::class
@Module
abstract class UiModule {
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@PerFragment
@ContributesAndroidInjector(modules = [(FilterModule::class)])
abstract fun contributeFilterFragment(): FilterFragment
}
you already have ViewModelFactory , so I don't paste this code.
Then FilterModule
@Module
abstract class FilterModule {
@Binds
@IntoMap
@PerFragment
@ViewModelKey(FilterViewModel::class)
abstract fun bindViewModel(viewModel: FilterViewModel): ViewModel
}
and finally FilterFragment and FilterViewModel
class FilterFragment : BottomSheetDialogFragment() {
@Inject
lateinit var factory: ViewModelProvider.Factory
private lateinit var binding: FragmentFilterBinding
private lateinit var viewModel: FilterViewModel
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = getDataBinding(inflater, R.layout.fragment_filter, container)
viewModel = getViewModel(factory)
binding.viewModel = viewModel
return binding.root
}
}
class FilterViewModel @Inject constructor(private val testUseCase:TestUseCase) : BaseViewModel() {
//do something
}
fragment_filter layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.myapp.presentation.screen.filter.FilterViewModel" />
</data>
.......
getDataBinding() and getViewModel() are extension functions
fun <T : ViewDataBinding> Fragment.getDataBinding(inflater: LayoutInflater, @LayoutRes layoutId: Int, container: ViewGroup?): T =
DataBindingUtil.inflate(inflater, layoutId, container, false)
inline fun <reified T : BaseViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory = ViewModelProviders.DefaultFactory(activity!!.application)): T =
ViewModelProviders.of(this, factory).get(T::class.java)
add a comment |
Try extending Injectable
class BottomSheet : BootomSheetDialogFragment(), Injectable
I think this will solve the issue
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53518053%2fhow-to-inject-a-viewmodel-into-bottomsheetdialogfragment-with-dagger2%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here is how I have provided ViewModel into BottomSheetDialogFragment().
First of all set up Dagger in MyApp class.
class MyApp : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
initDagger()
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
override fun supportFragmentInjector(): AndroidInjector<Fragment> = supportFragmentInjector
private fun initDagger(){
DaggerAppComponent
.builder()
.application(this)
.build()
.injectApp(this)
}
Then AppComponent class
@Singleton
@Component(
modules = [
AppModule::class,
UiModule::class,
AndroidSupportInjectionModule::class,
AndroidInjectionModule::class
])interface AppComponent : AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApp): Builder
fun build(): AppComponent
}
fun injectApp(app: MyApp)
}
Here we interested in UiModule::class
@Module
abstract class UiModule {
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@PerFragment
@ContributesAndroidInjector(modules = [(FilterModule::class)])
abstract fun contributeFilterFragment(): FilterFragment
}
you already have ViewModelFactory , so I don't paste this code.
Then FilterModule
@Module
abstract class FilterModule {
@Binds
@IntoMap
@PerFragment
@ViewModelKey(FilterViewModel::class)
abstract fun bindViewModel(viewModel: FilterViewModel): ViewModel
}
and finally FilterFragment and FilterViewModel
class FilterFragment : BottomSheetDialogFragment() {
@Inject
lateinit var factory: ViewModelProvider.Factory
private lateinit var binding: FragmentFilterBinding
private lateinit var viewModel: FilterViewModel
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = getDataBinding(inflater, R.layout.fragment_filter, container)
viewModel = getViewModel(factory)
binding.viewModel = viewModel
return binding.root
}
}
class FilterViewModel @Inject constructor(private val testUseCase:TestUseCase) : BaseViewModel() {
//do something
}
fragment_filter layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.myapp.presentation.screen.filter.FilterViewModel" />
</data>
.......
getDataBinding() and getViewModel() are extension functions
fun <T : ViewDataBinding> Fragment.getDataBinding(inflater: LayoutInflater, @LayoutRes layoutId: Int, container: ViewGroup?): T =
DataBindingUtil.inflate(inflater, layoutId, container, false)
inline fun <reified T : BaseViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory = ViewModelProviders.DefaultFactory(activity!!.application)): T =
ViewModelProviders.of(this, factory).get(T::class.java)
add a comment |
Here is how I have provided ViewModel into BottomSheetDialogFragment().
First of all set up Dagger in MyApp class.
class MyApp : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
initDagger()
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
override fun supportFragmentInjector(): AndroidInjector<Fragment> = supportFragmentInjector
private fun initDagger(){
DaggerAppComponent
.builder()
.application(this)
.build()
.injectApp(this)
}
Then AppComponent class
@Singleton
@Component(
modules = [
AppModule::class,
UiModule::class,
AndroidSupportInjectionModule::class,
AndroidInjectionModule::class
])interface AppComponent : AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApp): Builder
fun build(): AppComponent
}
fun injectApp(app: MyApp)
}
Here we interested in UiModule::class
@Module
abstract class UiModule {
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@PerFragment
@ContributesAndroidInjector(modules = [(FilterModule::class)])
abstract fun contributeFilterFragment(): FilterFragment
}
you already have ViewModelFactory , so I don't paste this code.
Then FilterModule
@Module
abstract class FilterModule {
@Binds
@IntoMap
@PerFragment
@ViewModelKey(FilterViewModel::class)
abstract fun bindViewModel(viewModel: FilterViewModel): ViewModel
}
and finally FilterFragment and FilterViewModel
class FilterFragment : BottomSheetDialogFragment() {
@Inject
lateinit var factory: ViewModelProvider.Factory
private lateinit var binding: FragmentFilterBinding
private lateinit var viewModel: FilterViewModel
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = getDataBinding(inflater, R.layout.fragment_filter, container)
viewModel = getViewModel(factory)
binding.viewModel = viewModel
return binding.root
}
}
class FilterViewModel @Inject constructor(private val testUseCase:TestUseCase) : BaseViewModel() {
//do something
}
fragment_filter layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.myapp.presentation.screen.filter.FilterViewModel" />
</data>
.......
getDataBinding() and getViewModel() are extension functions
fun <T : ViewDataBinding> Fragment.getDataBinding(inflater: LayoutInflater, @LayoutRes layoutId: Int, container: ViewGroup?): T =
DataBindingUtil.inflate(inflater, layoutId, container, false)
inline fun <reified T : BaseViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory = ViewModelProviders.DefaultFactory(activity!!.application)): T =
ViewModelProviders.of(this, factory).get(T::class.java)
add a comment |
Here is how I have provided ViewModel into BottomSheetDialogFragment().
First of all set up Dagger in MyApp class.
class MyApp : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
initDagger()
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
override fun supportFragmentInjector(): AndroidInjector<Fragment> = supportFragmentInjector
private fun initDagger(){
DaggerAppComponent
.builder()
.application(this)
.build()
.injectApp(this)
}
Then AppComponent class
@Singleton
@Component(
modules = [
AppModule::class,
UiModule::class,
AndroidSupportInjectionModule::class,
AndroidInjectionModule::class
])interface AppComponent : AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApp): Builder
fun build(): AppComponent
}
fun injectApp(app: MyApp)
}
Here we interested in UiModule::class
@Module
abstract class UiModule {
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@PerFragment
@ContributesAndroidInjector(modules = [(FilterModule::class)])
abstract fun contributeFilterFragment(): FilterFragment
}
you already have ViewModelFactory , so I don't paste this code.
Then FilterModule
@Module
abstract class FilterModule {
@Binds
@IntoMap
@PerFragment
@ViewModelKey(FilterViewModel::class)
abstract fun bindViewModel(viewModel: FilterViewModel): ViewModel
}
and finally FilterFragment and FilterViewModel
class FilterFragment : BottomSheetDialogFragment() {
@Inject
lateinit var factory: ViewModelProvider.Factory
private lateinit var binding: FragmentFilterBinding
private lateinit var viewModel: FilterViewModel
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = getDataBinding(inflater, R.layout.fragment_filter, container)
viewModel = getViewModel(factory)
binding.viewModel = viewModel
return binding.root
}
}
class FilterViewModel @Inject constructor(private val testUseCase:TestUseCase) : BaseViewModel() {
//do something
}
fragment_filter layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.myapp.presentation.screen.filter.FilterViewModel" />
</data>
.......
getDataBinding() and getViewModel() are extension functions
fun <T : ViewDataBinding> Fragment.getDataBinding(inflater: LayoutInflater, @LayoutRes layoutId: Int, container: ViewGroup?): T =
DataBindingUtil.inflate(inflater, layoutId, container, false)
inline fun <reified T : BaseViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory = ViewModelProviders.DefaultFactory(activity!!.application)): T =
ViewModelProviders.of(this, factory).get(T::class.java)
Here is how I have provided ViewModel into BottomSheetDialogFragment().
First of all set up Dagger in MyApp class.
class MyApp : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
initDagger()
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
override fun supportFragmentInjector(): AndroidInjector<Fragment> = supportFragmentInjector
private fun initDagger(){
DaggerAppComponent
.builder()
.application(this)
.build()
.injectApp(this)
}
Then AppComponent class
@Singleton
@Component(
modules = [
AppModule::class,
UiModule::class,
AndroidSupportInjectionModule::class,
AndroidInjectionModule::class
])interface AppComponent : AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApp): Builder
fun build(): AppComponent
}
fun injectApp(app: MyApp)
}
Here we interested in UiModule::class
@Module
abstract class UiModule {
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@PerFragment
@ContributesAndroidInjector(modules = [(FilterModule::class)])
abstract fun contributeFilterFragment(): FilterFragment
}
you already have ViewModelFactory , so I don't paste this code.
Then FilterModule
@Module
abstract class FilterModule {
@Binds
@IntoMap
@PerFragment
@ViewModelKey(FilterViewModel::class)
abstract fun bindViewModel(viewModel: FilterViewModel): ViewModel
}
and finally FilterFragment and FilterViewModel
class FilterFragment : BottomSheetDialogFragment() {
@Inject
lateinit var factory: ViewModelProvider.Factory
private lateinit var binding: FragmentFilterBinding
private lateinit var viewModel: FilterViewModel
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = getDataBinding(inflater, R.layout.fragment_filter, container)
viewModel = getViewModel(factory)
binding.viewModel = viewModel
return binding.root
}
}
class FilterViewModel @Inject constructor(private val testUseCase:TestUseCase) : BaseViewModel() {
//do something
}
fragment_filter layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.myapp.presentation.screen.filter.FilterViewModel" />
</data>
.......
getDataBinding() and getViewModel() are extension functions
fun <T : ViewDataBinding> Fragment.getDataBinding(inflater: LayoutInflater, @LayoutRes layoutId: Int, container: ViewGroup?): T =
DataBindingUtil.inflate(inflater, layoutId, container, false)
inline fun <reified T : BaseViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory = ViewModelProviders.DefaultFactory(activity!!.application)): T =
ViewModelProviders.of(this, factory).get(T::class.java)
edited Nov 29 '18 at 15:59
answered Nov 29 '18 at 15:46
Alexandr SushkovAlexandr Sushkov
777
777
add a comment |
add a comment |
Try extending Injectable
class BottomSheet : BootomSheetDialogFragment(), Injectable
I think this will solve the issue
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
add a comment |
Try extending Injectable
class BottomSheet : BootomSheetDialogFragment(), Injectable
I think this will solve the issue
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
add a comment |
Try extending Injectable
class BottomSheet : BootomSheetDialogFragment(), Injectable
I think this will solve the issue
Try extending Injectable
class BottomSheet : BootomSheetDialogFragment(), Injectable
I think this will solve the issue
answered Nov 28 '18 at 12:19
ABrABr
331211
331211
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
add a comment |
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
Injectable can not be resolved.
– codeme
Nov 28 '18 at 12:29
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
create an interface named Injectable and please let me take a look at your AppInejctor class used for injecting.
– ABr
Nov 28 '18 at 13:04
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
why does it help to create a interface Injectable, could you elaborate on that, in your answer?
– codeme
Nov 28 '18 at 13:12
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
Did you try the solution?
– ABr
Nov 29 '18 at 4:30
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53518053%2fhow-to-inject-a-viewmodel-into-bottomsheetdialogfragment-with-dagger2%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown