Вы можете пойти разными путями, но, учитывая вашу текущую реализацию (используя newInstance), я бы пошел с использованием вашей родительской активности в качестве посредника, работая так:
1) Создайте класс BaseFragment, который вашTestFragmentOne и TestFragmentTwo будут расширяться и содержать ссылку на вашу родительскую активность (здесь она называется «MainActivity»):
abstract class BaseFragment : Fragment() {
lateinit var ACTIVITY: MainActivity
override fun onAttach(context: Context) {
super.onAttach(context)
ACTIVITY = context as MainActivity
}
}
2) Затем в своей активности убедитесь, что вы объявили свою переменную как поле:
class MainActivity : AppCompatActivity() {
var textVariable = "This to be read from the fragments"
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
textVariable = "I can also change this text"
...
}
}
3) Затем из каждого фрагмента вы можете получить доступ к своей переменной, используя экземпляр, унаследованный от вашего BaseFragment:
class TestFragmentOne : BaseFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val incomingText = ACTIVITY.textVariable
println("Incoming text: "+incomingText)
// You can also set the value of this variable to be read from
// another fragment later
ACTIVITY.textVariable = "Text set from TestFragmentOne"
}
}