diff --git a/app/src/main/java/keijumt/devandroid/activity/BaseActivity.kt b/app/src/main/java/keijumt/devandroid/activity/BaseActivity.kt index ae3450d..fbb3c54 100644 --- a/app/src/main/java/keijumt/devandroid/activity/BaseActivity.kt +++ b/app/src/main/java/keijumt/devandroid/activity/BaseActivity.kt @@ -1,9 +1,25 @@ package keijumt.devandroid.activity +import android.arch.lifecycle.ViewModelProvider +import android.support.v4.app.Fragment import android.support.v7.app.AppCompatActivity +import dagger.android.AndroidInjector +import dagger.android.DispatchingAndroidInjector +import dagger.android.support.HasSupportFragmentInjector +import keijumt.devandroid.di.Injectable +import javax.inject.Inject /** * Activityの基底クラス */ -abstract class BaseActivity : AppCompatActivity() { +abstract class BaseActivity : AppCompatActivity(), HasSupportFragmentInjector, Injectable { + + @Inject + lateinit var viewModelFactory: ViewModelProvider.Factory + @Inject + lateinit var androidInjector: DispatchingAndroidInjector + + override fun supportFragmentInjector(): AndroidInjector { + return androidInjector + } } \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/di/module/ActivityModule.kt b/app/src/main/java/keijumt/devandroid/di/module/ActivityModule.kt index c90e923..003fc82 100644 --- a/app/src/main/java/keijumt/devandroid/di/module/ActivityModule.kt +++ b/app/src/main/java/keijumt/devandroid/di/module/ActivityModule.kt @@ -1,6 +1,8 @@ package keijumt.devandroid.di.module import dagger.Module +import dagger.android.ContributesAndroidInjector +import keijumt.devandroid.activity.MainActivity /** * Module: Activity 定義 @@ -8,4 +10,7 @@ @Module internal abstract class ActivityModule { + @ContributesAndroidInjector(modules = arrayOf(FragmentModule::class)) + internal abstract fun mainActivity(): MainActivity + } \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/di/module/FragmentModule.kt b/app/src/main/java/keijumt/devandroid/di/module/FragmentModule.kt index 7bc38f4..9f55371 100644 --- a/app/src/main/java/keijumt/devandroid/di/module/FragmentModule.kt +++ b/app/src/main/java/keijumt/devandroid/di/module/FragmentModule.kt @@ -1,6 +1,8 @@ package keijumt.devandroid.di.module import dagger.Module +import dagger.android.ContributesAndroidInjector +import keijumt.devandroid.fragment.MainFragment /** * Module: Fragment 定義 @@ -8,4 +10,7 @@ @Module internal abstract class FragmentModule { + @ContributesAndroidInjector + internal abstract fun mainFragment(): MainFragment + } \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/di/module/ViewModelModule.kt b/app/src/main/java/keijumt/devandroid/di/module/ViewModelModule.kt index 8051124..d3d8223 100644 --- a/app/src/main/java/keijumt/devandroid/di/module/ViewModelModule.kt +++ b/app/src/main/java/keijumt/devandroid/di/module/ViewModelModule.kt @@ -5,6 +5,8 @@ import dagger.Binds import dagger.MapKey import dagger.Module +import dagger.multibindings.IntoMap +import keijumt.devandroid.viewmodel.MainViewModel import keijumt.devandroid.viewmodel.ViewModelFactory import kotlin.reflect.KClass @@ -21,6 +23,11 @@ internal abstract class ViewModelModule { @Binds + @IntoMap + @ViewModelKey(MainViewModel::class) + abstract fun bindMainViewModel(viewModel: MainViewModel): ViewModel + + @Binds abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory } \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/fragment/BaseFragment.kt b/app/src/main/java/keijumt/devandroid/fragment/BaseFragment.kt index 6b6ffb2..3c41c4c 100644 --- a/app/src/main/java/keijumt/devandroid/fragment/BaseFragment.kt +++ b/app/src/main/java/keijumt/devandroid/fragment/BaseFragment.kt @@ -1,9 +1,15 @@ package keijumt.devandroid.fragment -import android.app.Fragment +import android.arch.lifecycle.ViewModelProvider +import android.support.v4.app.Fragment +import keijumt.devandroid.di.Injectable +import javax.inject.Inject /** * Fragmentの基底クラス */ -abstract class BaseFragment : Fragment() { +abstract class BaseFragment : Fragment(), Injectable { + + @Inject + lateinit var viewModelFactory: ViewModelProvider.Factory } \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt b/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt index 0e196c7..39f865a 100644 --- a/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt +++ b/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt @@ -1,8 +1,10 @@ package keijumt.devandroid.fragment +import android.arch.lifecycle.ViewModelProviders import android.databinding.DataBindingUtil import android.os.Bundle +import android.support.v4.app.FragmentActivity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -15,10 +17,12 @@ lateinit var binding: FragmentMainBinding lateinit var mainViewModel: MainViewModel + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val nonNullActivity: FragmentActivity = activity ?: return null binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, null, false) - mainViewModel = MainViewModel() + mainViewModel = ViewModelProviders.of(nonNullActivity, viewModelFactory).get(MainViewModel::class.java) binding.mainViewModel = mainViewModel return binding.root } diff --git a/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt b/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt index 673beb5..8895c66 100644 --- a/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt +++ b/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt @@ -1,6 +1,7 @@ package keijumt.devandroid.viewmodel import android.arch.lifecycle.ViewModel +import javax.inject.Inject -class MainViewModel : ViewModel() { +class MainViewModel @Inject constructor() : ViewModel() { } \ No newline at end of file