Issue
I am using navigationcontroller to navigate to another fragment
Navigate to second fragment
private fun moveToNextScreen(userId: String) {
val bundle = bundleOf("userId" to userId)
binding.googleLogin.findNavController().navigate(
R.id.action_loginFragment_to_signupFragment, bundle
)
}
The fragment I am navigating to
class UserSetupFragment : Fragment() {
private lateinit var binding: FragmentUserSetupBinding
var optionCb = mutableListOf<AppCompatCheckBox>()
var optionsList =
ArrayList<String>(Arrays.asList(*resources.getStringArray(R.array.profile_options)))
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentUserSetupBinding.inflate(inflater, container, false)
return binding.getRoot()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
createOptionsCheckBox()
}
private fun createOptionsCheckBox() {
for (option in optionsList) {
val checkBox = AppCompatCheckBox(activity)
checkBox.setText(option)
checkBox.setTextColor(ContextCompat.getColor(requireActivity(), android.R.color.black));
optionCb.add(checkBox)
binding.optionsLayout.addView(checkBox)
}
}
}
I am getting the exception
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=66957, result=-1, data=Intent { (has extras) }} to activity {com.patient.reach52/com.patient.reach52.view.authenticate.AuthenticateActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.patient.reach52.view.authenticate.UserSetupFragment: calling Fragment constructor caused an exception
What is wrong over here?
Solution
You cannot access resources
until the fragment will be attached to an activity. So you have to delay instantiation of optionsList
class UserSetupFragment : Fragment() {
lateinit var optionsList: List<String>
override fun onAttach(context: Context) {
super.onAttach(context)
optionsList = resources.getStringArray(R.array.profile_options).toList()
}
...
Answered By - Andrei Tanana