Передача данных из Activity во фрагмент, созданный с помощью FragmentManager
Вопрос вроде бы избитый, но, изучив ряд тем, проблему так и не решил. Фрагмент наотрез отказывается принимать данные через bundle, либо я неправильно обращаюсь к аргументам. Вероятно здесь стоит работать через адаптер, но я ума не приложу, как это реализовать. Задачей стоит передать из активити текстовое значение и записать его в поле ввода на разметке фрагмента.
Activity:
private fun init(){
val fm: FragmentManager = supportFragmentManager
adapter = FragmentAdapter(fm, lifecycle)
binding.viewPager2.adapter = adapter
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("Профиль"))
...
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("Атрибуты"))
binding.tabLayout.addOnTabSelectedListener(object : OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
binding.viewPager2.currentItem = tab.position
}
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
binding.viewPager2.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
binding.tabLayout.selectTab(binding.tabLayout.getTabAt(position))
}
})
getIntents()
}
private fun getIntents(){
...
val bundle = Bundle()
bundle.putString("I_PNAME_KEY", "например")
ProfileMainFragment.getInstance(args = bundle)
}
ProfileMainFragment:
class ProfileMainFragment : Fragment() {
private var binding: FragmentProfileMainBinding? = null
companion object {
fun getInstance(args: Bundle?): ProfileMainFragment = ProfileMainFragment().apply { arguments = args }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentProfileMainBinding.bind(view)
getValues()
}
private fun getValues(){
...
binding!!.actPrPName.setText(arguments?.getString("I_PNAME_KEY"))
}
}
Адаптер:
class FragmentAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun createFragment(position: Int): Fragment {
when (position) {
1 -> return ProfileAtributesFragment()
2 -> return ProfileAbilitiesFragment()
3 -> return ProfileAdvantagesFragment()
4 -> return ProfileUnvitalFragment()
5 -> return ProfileCommentsFragment()
}
return ProfileMainFragment()
}
override fun getItemCount(): Int {
return 6
}
}