TequilaOne
@TequilaOne

Как в Activity получить доступ к функциям ViewModel, которая реализована в Fragment?

Как можно в Activity получить доступ к функции someFunction(), которые находятся в этой ViewModel, если эта ViewModel используется во Fragment?

Код ExampleViewModel.kt:
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:
class ExampleFragment : Fragment() {

   private val exampleViewModel: ExampleViewModel by viewModels { ViewModelsProviderFactory }

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

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


Ну а в MainActivity.kt нужно использовать функцию someFunction() из ExampleViewModel :

class MainActivity : AppCompatActivity() {

    private var exampleFragment: Fragment = ExampleFragment()

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

        }

Проблема в том, что использовать функции, которые находятся во ViewModel я могу только из ExampleFragment, а из любого другого фрагмента или активности, либо другого класса не получается.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
@Dmtm
Android
не надо так делать, но если очень хочется - из активити найти фрагмент через fragmentmanager и через фрагмент обратиться к его vm
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы