Для обмена данными или событиями между фрагментами в 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`.