Sharing Data between MainActivity and App Fragments

One way to exchange data or events between fragments in Android Studio is to use `ViewModel`. You will need `ViewModel` together with `ViewModelProvider` and a shared `ViewModel` for your activity.

First, create a `SharedViewModel`:

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class SharedViewModel : ViewModel() {

    private val _someLiveData = MutableLiveData<String>()
    val someLiveData: LiveData<String> get() = _someLiveData

    fun updateData(data: String) {
        _someLiveData.value = data
    }
}

In `MainActivity`, create an instance of `SharedViewModel`:

class MainActivity : AppCompatActivity() {
   private lateinit var sharedViewModel: SharedViewModel
   override fun onCreate(savedInstanceState: Bundle?) {
       // Остальной код...
       sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
   }
   // Остальной код...
}

Now, in `GenFragment`, retrieve an instance of `SharedViewModel` and update the data in `onCreateView` or elsewhere:

class GenFragment : Fragment() {
   private lateinit var sharedViewModel: SharedViewModel
   override fun onCreateView(
       inflater: LayoutInflater, container: ViewGroup?,
       savedInstanceState: Bundle?
   ): View? {
       sharedViewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
       // Получите данные из SharedViewModel и выполните необходимые действия
       val someData = sharedViewModel.someLiveData.observe(viewLifecycleOwner, Observer {
           // Обновите контекст фрагмента
           updateFragmentContext()
       })
       // Остальной код...
       return inflater.inflate(R.layout.fragment_gen, container, false)
   }
   private fun updateFragmentContext() {
       // Реализуйте ваш метод обновления контекста здесь
   }
   // Остальной код...
}

Then, in your `onOptionsItemSelected` method, update the data in `SharedViewModel`:

R.id.action_clear -> {
   sharedViewModel.updateData("your_data_here")
   val str = getString(R.string.cleared_toast)
   Toast.makeText(this, str, Toast.LENGTH_SHORT).show()
   return true
}

Replace your_data_here with the actual data you want to pass to `GenFragment`.