Skip to content

Instantly share code, notes, and snippets.

View Rasalexman's full-sized avatar
🌍
i hope you are going to have an amazing day

Alexandr Minkin Rasalexman

🌍
i hope you are going to have an amazing day
View GitHub Profile
abstract class ViewBindController : LifecycleController, KodeinAware {
override val kodein: Kodein by lazy {
(applicationContext as KodeinAware).kodein
}
constructor()
constructor(args: Bundle) : super(args)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View {
val viewInstance = getViewInstance(inflater.context)
class GenresController : BaseRecyclerController() {
private val genresViewModel: GenresViewModel by viewModel()
override fun onViewCreated(view: View) {
super.onViewCreated(view)
genresViewModel.getDataList().observe (this, Observer(::handlerObserverResult))
}
private fun handlerObserverResult(result: SResult<List<GenreUI>>) {
class MainActivity : AppCompatActivity(), ActionBarProvider {
// our main router
private var mainRouter: Router? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// attach controller to Conductor router and root container from AnkoLayout
val container = frameLayout { lparams(matchParent, matchParent) }
class MainActivity : AppCompatActivity(), ActionBarProvider {
// our main router
private var mainRouter: Router? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// attach controller to Conductor router
private val genresViewModel: GenresViewModel by viewModel()
inline fun <reified VM : ViewModel, T> T.viewModel(): Lazy<VM> where T : KodeinAware, T : LifecycleController {
return lazy(LazyThreadSafetyMode.NONE) {
ViewModelProviders.of(this.activity as AppCompatActivity, direct.instance<ViewModelFactory>()).get(VM::class.java)
}
}
val viewModelsModule = Kodein.Module("view_models_module") {
bind<GenresViewModel>() with provider { GenresViewModel(instance()) }
bind<MoviesViewModel>() with provider { MoviesViewModel(instance()) }
bind<MovieDetailViewModel>() with provider { MovieDetailViewModel(instance()) }
}
val viewModelsModule = Kodein.Module("view_models_module") {
bind<GenresViewModel>() with provider { GenresViewModel(instance()) }
bind<MoviesViewModel>() with provider { MoviesViewModel(instance()) }
bind<MovieDetailViewModel>() with provider { MovieDetailViewModel(instance()) }
}
class GenresViewModel(
private val getGenresUseCase: GetGenresUseCase
) : ViewModel() {
// 1
private val dataList: LiveData<SResult<List<GenreUI>>> =
liveData(context = viewModelScope.coroutineContext + Dispatchers.IO) {
emit(loading())
emit(getGenresUseCase.execute())
}
// 2
override fun onViewCreated(view: View) {
super.onViewCreated(view)
genresViewModel.getDataList().observe (this, Observer(::handlerObserverResult))
}