Как обмениваться данными между MainActivity и фрагментами приложения

Для обмена данными или событиями между фрагментами в Android Studio можно воспользоваться таким способом, как использование `ViewModel`. Вам придется использовать `ViewModel` в сочетании с `ViewModelProvider` и общим `ViewModel` для вашей активности.

Во-первых, создайте класс `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
    }
}

В `MainActivity` создайте экземпляр `SharedViewModel`:

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

Теперь в `GenFragment` получите экземпляр `SharedViewModel` и обновите данные в методе `onCreateView` или в другом месте:

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() {
       // Реализуйте ваш метод обновления контекста здесь
   }
   // Остальной код...
}

Теперь, в вашем методе `onOptionsItemSelected`, обновите данные в `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
}

Замените "your_data_here" на фактические данные, которые вы хотите передать в `GenFragment`.