diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c97f5a4..4ddbddb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,7 +12,6 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning"> - @@ -21,6 +20,10 @@ + + + + diff --git a/app/src/main/java/keijumt/devandroid/activity/AsyncActivity.kt b/app/src/main/java/keijumt/devandroid/activity/AsyncActivity.kt new file mode 100644 index 0000000..1a55469 --- /dev/null +++ b/app/src/main/java/keijumt/devandroid/activity/AsyncActivity.kt @@ -0,0 +1,12 @@ +package keijumt.devandroid.activity + +import android.os.Bundle +import keijumt.devandroid.R + +class AsyncActivity : BaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_async) + } +} \ 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 88c5b17..535b0cb 100644 --- a/app/src/main/java/keijumt/devandroid/di/module/ActivityModule.kt +++ b/app/src/main/java/keijumt/devandroid/di/module/ActivityModule.kt @@ -3,6 +3,7 @@ import dagger.Module import dagger.android.ContributesAndroidInjector import keijumt.devandroid.activity.ApiActivity +import keijumt.devandroid.activity.AsyncActivity import keijumt.devandroid.activity.MainActivity /** @@ -17,4 +18,6 @@ @ContributesAndroidInjector(modules = arrayOf(FragmentModule::class)) internal abstract fun apiActivity(): ApiActivity + @ContributesAndroidInjector(modules = arrayOf(FragmentModule::class)) + internal abstract fun asyncActivity(): AsyncActivity } \ 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 fd01ee7..0fca028 100644 --- a/app/src/main/java/keijumt/devandroid/di/module/FragmentModule.kt +++ b/app/src/main/java/keijumt/devandroid/di/module/FragmentModule.kt @@ -3,6 +3,7 @@ import dagger.Module import dagger.android.ContributesAndroidInjector import keijumt.devandroid.fragment.ApiFragment +import keijumt.devandroid.fragment.AsyncFragment import keijumt.devandroid.fragment.MainFragment /** @@ -16,4 +17,7 @@ @ContributesAndroidInjector internal abstract fun apiFragment(): ApiFragment + + @ContributesAndroidInjector + internal abstract fun asyncFragment(): AsyncFragment } \ 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 41c17ee..b3dc8a8 100644 --- a/app/src/main/java/keijumt/devandroid/di/module/ViewModelModule.kt +++ b/app/src/main/java/keijumt/devandroid/di/module/ViewModelModule.kt @@ -7,6 +7,7 @@ import dagger.Module import dagger.multibindings.IntoMap import keijumt.devandroid.viewmodel.ApiViewModel +import keijumt.devandroid.viewmodel.AsyncViewModel import keijumt.devandroid.viewmodel.MainViewModel import keijumt.devandroid.viewmodel.ViewModelFactory import kotlin.reflect.KClass @@ -34,6 +35,11 @@ abstract fun bindApiViewModel(viewModel: ApiViewModel): ViewModel @Binds + @IntoMap + @ViewModelKey(AsyncViewModel::class) + abstract fun bindAsyncViewModel(viewModel: AsyncViewModel): 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/AsyncFragment.kt b/app/src/main/java/keijumt/devandroid/fragment/AsyncFragment.kt new file mode 100644 index 0000000..18e24f0 --- /dev/null +++ b/app/src/main/java/keijumt/devandroid/fragment/AsyncFragment.kt @@ -0,0 +1,30 @@ +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 +import keijumt.devandroid.R +import keijumt.devandroid.databinding.FragmentAsyncBinding +import keijumt.devandroid.viewmodel.AsyncViewModel + +class AsyncFragment : BaseFragment() { + + lateinit var binding: FragmentAsyncBinding + lateinit var asyncViewModel: AsyncViewModel + + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + val nonNullActivity: FragmentActivity = activity ?: return null + binding = DataBindingUtil.inflate(inflater, R.layout.fragment_async, null, false) + asyncViewModel = ViewModelProviders.of(nonNullActivity, viewModelFactory).get(AsyncViewModel::class.java) + binding.asyncViewModel = asyncViewModel + return binding.root + } + + +} diff --git a/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt b/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt index 716a0cc..3b16dd1 100644 --- a/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt +++ b/app/src/main/java/keijumt/devandroid/fragment/MainFragment.kt @@ -11,6 +11,7 @@ import android.view.ViewGroup import keijumt.devandroid.R import keijumt.devandroid.activity.ApiActivity +import keijumt.devandroid.activity.AsyncActivity import keijumt.devandroid.databinding.FragmentMainBinding import keijumt.devandroid.viewmodel.MainViewModel @@ -34,6 +35,7 @@ mainViewModel.event.observe(this, Observer { when (it) { MainViewModel.Event.Api -> startActivity(Intent(activity, ApiActivity::class.java)) + MainViewModel.Event.Async -> startActivity(Intent(activity, AsyncActivity::class.java)) } }) } diff --git a/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt b/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt new file mode 100644 index 0000000..f55213c --- /dev/null +++ b/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt @@ -0,0 +1,7 @@ +package keijumt.devandroid.viewmodel + +import javax.inject.Inject + +class AsyncViewModel @Inject constructor() : BaseViewModel() { + +} \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt b/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt index ba37cf5..b766904 100644 --- a/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt +++ b/app/src/main/java/keijumt/devandroid/viewmodel/MainViewModel.kt @@ -8,10 +8,15 @@ val event = SingleLiveEvent() enum class Event { - Api + Api, + Async } fun startApi() { event.value = Event.Api } + + fun startAsync() { + event.value = Event.Async + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_async.xml b/app/src/main/res/layout/activity_async.xml new file mode 100644 index 0000000..d8fb324 --- /dev/null +++ b/app/src/main/res/layout/activity_async.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_async.xml b/app/src/main/res/layout/fragment_async.xml new file mode 100644 index 0000000..7a39090 --- /dev/null +++ b/app/src/main/res/layout/fragment_async.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index e50ee8b..2936d35 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -21,5 +21,14 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> +