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?