I wonder what's the idiomatic way to pass datas from fragments back to its container activity?
Consider this sign up activity:
class SignUpActivity : AppCompatActivity() {
lateinit var uiBinding: ActivitySignUpBinding
lateinit var btnNext: MaterialButton
lateinit var currentFragment: Fragment
var fragmentIdx: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
uiBinding = ActivitySignUpBinding.inflate(layoutInflater)
currentFragment = InputBasicDataFragment()
supportFragmentManager.beginTransaction().replace(R.id.fragment_signup_container,
currentFragment).commit()
btnNext = uiBinding.btnSignUpNext
val pref = SharedPrefUtil()
btnNext.setOnClickListener {
when (fragmentIdx){
0 -> {
++fragmentIdx
// read all the data on InputBasicData fragment, then save them on shared pref
pref.write('FRAGMENT1_NAME', '....')
pref.write('FRAGMENT1_MAIL', '....')
currentFragment = InputAdditionalDataFragment()
}
1-> {
++fragmentIdx
// read all the data on InputAdditionalData fragment, then save them on shared pref as well
pref.write('FRAGMENT2_HOME_ADDRESS', '....')
pref.write('FRAGMENT2_JOB', '....')
pref.write('FRAGMENT2_WORK_ADDRESS', '....')
currentFragment = PreviewDataFragment()
}
2 -> {
// done. ready to upload data that are stored in shared pref
// let's hit the API ...
intent iii = Intent(this@SignUpActivity, NextActivity::class.java)
startActivity(iii)
}
}
supportFragmentManager.beginTransaction().replace(R.id.fragment_signup_container,
currentFragment).commit()
}
setContentView(uiBinding.root)
}
}
There's no button on those 3 fragments, basically only TextView and EditText. The Button is located on the container activity. First the fragment container loads InputBasicDataFragment. When the button is clicked, how to access all the inputs so can be saved on shared pref?