![]() |
Kotlin Cookbook: A Problem-Focused Approach 新品価格 |
![]()
@ContributesAndroidInjectorを使ってFragmentにDaggerでInjectする
の続編
次はDaggerのAndoridサポートを使ってみる
・Activity
injectのコードが消せる
class MainActivity : DaggerAppCompatActivity() {
@Inject
lateinit var masterka: Masterka
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, MainFragment.newInstance())
.commitNow()
}
Log.e("masterka", "masterka:$masterka")
}
}
・Fragment
injectのコードが消せる
class MainFragment : DaggerFragment() {
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
@Inject
lateinit var masterka: Masterka
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
Log.e("masterka2", "masterka:$masterka")
}
}
・Application
DaggerApplicationを継承してHasAndroidInjectorを消してoverrideするメソッドを変更
class MyApplication : DaggerApplication() {
override fun onCreate() {
super.onCreate()
DaggerAppComponent.create().inject(this)
}
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.create()
}
}
・AppComponent
AndroidInjectorを継承する
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
ActivityBindingModule::class
]
)
interface AppComponent : AndroidInjector<MyApplication> {
}
これでボイラーコードをかなり消せませたとさ
そろそろDaggerも終わり
続くよ
