Created
July 5, 2023 07:05
-
-
Save senamit2708/d532fbd8232adea7c2d15f0e3106380d to your computer and use it in GitHub Desktop.
Viewmodel definition
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //viewmodel ktx-> used for defining viewmodel using "by activityViewModel()" | |
| implementation 'androidx.fragment:fragment-ktx:1.6.0' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import android.app.Application | |
| import androidx.lifecycle.ViewModel | |
| import androidx.lifecycle.ViewModelProvider | |
| import com.example.coroutinelearning.repositories.MyRepositoryTwo | |
| import java.lang.IllegalArgumentException | |
| class MyAndroidViewModelFactoryFour( | |
| private val application: Application, | |
| private val repository: MyRepositoryTwo | |
| ) : ViewModelProvider.Factory { | |
| override fun <T : ViewModel> create(modelClass: Class<T>): T { | |
| if (modelClass.isAssignableFrom(MyAndroidViewModelFour::class.java)) { | |
| return MyAndroidViewModelFour(application, repository) as T | |
| } | |
| if (modelClass.isAssignableFrom(MyAndroidViewModelFive::class.java)) { | |
| return MyAndroidViewModelFive(application, repository) as T | |
| } | |
| throw IllegalArgumentException("unknown viewmodel class") | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import android.app.Application | |
| import androidx.lifecycle.AndroidViewModel | |
| import com.example.coroutinelearning.repositories.MyRepositoryTwo | |
| class MyAndroidViewModelFour(application: Application, repository: MyRepositoryTwo) : | |
| AndroidViewModel(application) { | |
| private val viewModelClassName = MyAndroidViewModelFour::class.simpleName | |
| fun getClassName(): String { | |
| return viewModelClassName ?: "not found" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import android.app.Application | |
| import androidx.lifecycle.AndroidViewModel | |
| class MyAndroidViewModelOne(application: Application) : AndroidViewModel(application) { | |
| private val viewModelClassName = MyAndroidViewModelOne::class.simpleName | |
| fun getClassName(): String { | |
| return viewModelClassName ?: "not found" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import android.app.Application | |
| import androidx.lifecycle.AndroidViewModel | |
| import androidx.lifecycle.ViewModel | |
| import androidx.lifecycle.ViewModelProvider | |
| import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY | |
| import androidx.lifecycle.viewmodel.CreationExtras | |
| import com.example.coroutinelearning.repositories.MyRepositoryOne | |
| class MyAndroidViewModelSix(application: Application, repository: MyRepositoryOne) : | |
| AndroidViewModel(application) { | |
| private val className = MyAndroidViewModelSix::class.simpleName | |
| fun getClassName(): String { | |
| return className ?: "not found" | |
| } | |
| //define viewmodel factory in a companion object | |
| companion object { | |
| val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { | |
| override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { | |
| val application = checkNotNull(extras[APPLICATION_KEY]) | |
| val repository = MyRepositoryOne(application) | |
| return MyAndroidViewModelSix( | |
| application, repository | |
| ) as T | |
| } | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import androidx.lifecycle.ViewModel | |
| import androidx.lifecycle.ViewModelProvider | |
| import com.example.coroutinelearning.repositories.MyRepositoryTwo | |
| import java.lang.IllegalArgumentException | |
| class MyViewModelFactoryFour(private val repository: MyRepositoryTwo) : ViewModelProvider.Factory { | |
| override fun <T : ViewModel> create(modelClass: Class<T>): T { | |
| if (modelClass.isAssignableFrom(MyViewModelFour::class.java)) { | |
| return MyViewModelFour(repository) as T | |
| } | |
| if (modelClass.isAssignableFrom(MyViewModelFive::class.java)) { | |
| return MyViewModelFive(repository) as T | |
| } | |
| throw IllegalArgumentException("no such viewmodel found") | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import androidx.lifecycle.ViewModel | |
| import com.example.coroutinelearning.repositories.MyRepositoryTwo | |
| class MyViewModelFour(repository: MyRepositoryTwo) : ViewModel() { | |
| private val viewModelClassName = MyViewModelFour::class.simpleName | |
| fun getClassName(): String { | |
| return viewModelClassName ?: "not found" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.viewModels.learning | |
| import androidx.lifecycle.ViewModel | |
| class MyViewModelOne : ViewModel() { | |
| private val viewModelClassName = MyViewModelOne::class.simpleName | |
| fun getClassName(): String { | |
| return viewModelClassName ?: "not found" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.example.coroutinelearning.fragments | |
| import android.os.Bundle | |
| import android.util.Log | |
| import android.view.LayoutInflater | |
| import android.view.View | |
| import android.view.ViewGroup | |
| import androidx.fragment.app.Fragment | |
| import androidx.fragment.app.activityViewModels | |
| import androidx.lifecycle.ViewModelProvider | |
| import com.example.coroutinelearning.databinding.ViewmodelDefinintionBinding | |
| import com.example.coroutinelearning.repositories.MyRepositoryTwo | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelFactoryFour | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelFive | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelFour | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelOne | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelSix | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelThree | |
| import com.example.coroutinelearning.viewModels.learning.MyAndroidViewModelTwo | |
| import com.example.coroutinelearning.viewModels.learning.MyViewModelFactoryFour | |
| import com.example.coroutinelearning.viewModels.learning.MyViewModelFive | |
| import com.example.coroutinelearning.viewModels.learning.MyViewModelFour | |
| import com.example.coroutinelearning.viewModels.learning.MyViewModelOne | |
| import com.example.coroutinelearning.viewModels.learning.MyViewModelThree | |
| import com.example.coroutinelearning.viewModels.learning.MyViewModelTwo | |
| class ViewModelDefinitionFragment : Fragment() { | |
| private val TAG = ViewModelDefinitionFragment::class.simpleName | |
| private lateinit var binding: ViewmodelDefinintionBinding | |
| private lateinit var myViewModelOne: MyViewModelOne | |
| private lateinit var myAndroidViewModelOne: MyAndroidViewModelOne | |
| private val myViewModelTwo: MyViewModelTwo by lazy { | |
| ViewModelProvider(requireActivity())[MyViewModelTwo::class.java] | |
| } | |
| private val myAndroidViewModelTwo: MyAndroidViewModelTwo by lazy { | |
| ViewModelProvider(requireActivity())[MyAndroidViewModelTwo::class.java] | |
| } | |
| private val myViewModelThree: MyViewModelThree by activityViewModels() | |
| private val myAndroidViewModelThree: MyAndroidViewModelThree by activityViewModels() | |
| private val myViewModelFour: MyViewModelFour by activityViewModels { | |
| MyViewModelFactoryFour(MyRepositoryTwo()) | |
| } | |
| private val myAndroidViewModelFour: MyAndroidViewModelFour by activityViewModels { | |
| MyAndroidViewModelFactoryFour(requireActivity().application, MyRepositoryTwo()) | |
| } | |
| private val myViewModelFive: MyViewModelFive by lazy { | |
| val factory = MyViewModelFactoryFour(MyRepositoryTwo()) | |
| ViewModelProvider(this, factory).get(MyViewModelFive::class.java) | |
| } | |
| private val myAndroidViewModelFive: MyAndroidViewModelFive by lazy { | |
| val factory = | |
| MyAndroidViewModelFactoryFour(requireActivity().application, MyRepositoryTwo()) | |
| ViewModelProvider(this, factory).get(MyAndroidViewModelFive::class.java) | |
| } | |
| private val myAndroidViewModelSix: MyAndroidViewModelSix by activityViewModels { MyAndroidViewModelSix.factory } | |
| override fun onCreate(savedInstanceState: Bundle?) { | |
| super.onCreate(savedInstanceState) | |
| } | |
| override fun onCreateView( | |
| inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? | |
| ): View? { | |
| binding = ViewmodelDefinintionBinding.inflate(inflater, container, false) | |
| return binding.root | |
| } | |
| override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
| super.onViewCreated(view, savedInstanceState) | |
| viewModelLateintInitialize() | |
| loadDataViewModelLateint() | |
| loadDataViewModelByLazy() | |
| loadDataViewModelByKTX() | |
| loadDataViewModelFactoryByKTX() | |
| loadDataViewModelFactoryByLazy() | |
| loadDataViewModelFactoryObject() | |
| } | |
| private fun viewModelLateintInitialize() { | |
| myViewModelOne = ViewModelProvider(requireActivity())[MyViewModelOne::class.java] | |
| myAndroidViewModelOne = | |
| ViewModelProvider(requireActivity())[MyAndroidViewModelOne::class.java] | |
| } | |
| private fun loadDataViewModelLateint() { | |
| val myViewModelOneName = myViewModelOne.getClassName() | |
| val myAndroidViewModelOneName = myAndroidViewModelOne.getClassName() | |
| Log.i(TAG, "myViewModelOne name: $myViewModelOneName") | |
| Log.i(TAG, "myAndroidViewModelOne name: $myAndroidViewModelOneName") | |
| } | |
| private fun loadDataViewModelByLazy() { | |
| val myViewModelTwoName = myViewModelTwo.getClassName() | |
| val myAndroidViewModelTwoName = myAndroidViewModelTwo.getClassName() | |
| Log.i(TAG, "myViewModelTwo name: $myViewModelTwoName") | |
| Log.i(TAG, "myAndroidViewModelTwo name: $myAndroidViewModelTwoName") | |
| } | |
| private fun loadDataViewModelByKTX() { | |
| val myViewModelThreeName = myViewModelThree.getClassName() | |
| val myAndroidViewModelThreeName = myAndroidViewModelThree.getClassName() | |
| Log.i(TAG, "myViewModelThree name: $myViewModelThreeName") | |
| Log.i(TAG, "myAndroidViewModelThree name: $myAndroidViewModelThreeName") | |
| } | |
| private fun loadDataViewModelFactoryByLazy() { | |
| val myViewModelFourName = myViewModelFour.getClassName() | |
| val myAndroidViewModelFourName = myAndroidViewModelFour.getClassName() | |
| Log.i(TAG, "myViewModelFour name: $myViewModelFourName") | |
| Log.i(TAG, "myAndroidViewModelFour name: $myAndroidViewModelFourName") | |
| } | |
| private fun loadDataViewModelFactoryByKTX() { | |
| val myViewModelFiveName = myViewModelFive.getClassName() | |
| val myAndroidViewModelFiveName = myAndroidViewModelFive.getClassName() | |
| Log.i(TAG, "myViewModelFive name: $myViewModelFiveName") | |
| Log.i(TAG, "myAndroidViewModelFive name: $myAndroidViewModelFiveName") | |
| } | |
| private fun loadDataViewModelFactoryObject() { | |
| val myAndroidViewModelSixName = myAndroidViewModelSix.getClassName() | |
| Log.i(TAG, "myAndroidViewModelSix name: $myAndroidViewModelSixName") | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment