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