A
A
Anton2020-09-18 09:36:28
Android
Anton, 2020-09-18 09:36:28

How to access the functions of the ViewModel in the Activity, which is implemented in the Fragment?

How can you access the someFunction() function in this ViewModel in an Activity if this ViewModel is used in a Fragment?

ExampleViewModel.kt code:

class ExampleViewModel(private val repo: ApiRepository) : ViewModel() {

    private val mutableLiveData = MutableLiveData<Resource<List<Item>>>()
    lateinit var item: UserItem

    fun getLiveData(): LiveData<Resource<List<Item>>> {
        return mutableLiveData
    }

    fun someFunction() {
    //...
    }

    //...
    
}


ExampleFragment.kt code:
class ExampleFragment : Fragment() {

   private val exampleViewModel: ExampleViewModel by viewModels { ViewModelsProviderFactory }

   override fun onCreateView(
        //...
       setObservers()
    }

    private fun setObservers() {
    exampleViewModel.getLiveData().observe(viewLifecycleOwner, {
    //..
    }


Well, in MainActivity.kt you need to use the someFunction() function from ExampleViewModel :

class MainActivity : AppCompatActivity() {

    private var exampleFragment: Fragment = ExampleFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //..
       
        // ?? использовать например тут: someFunction() из ExampleViewModel , либо в другом фрагменте

        }

Проблема в том, что использовать функции, которые находятся во ViewModel я могу только из ExampleFragment, а из любого другого фрагмента или активности, либо другого класса не получается.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Dmtm, 2020-09-18
@TequilaOne

не надо так делать, но если очень хочется - из активити найти фрагмент через fragmentmanager и через фрагмент обратиться к его vm

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question