Текст кнопки переключения Android возвращается к значению по умолчанию, когда фрагмент вызывается из заднего стека
У меня есть фрагмент, обработанный как часть навигационного графика. Назовите его «Фрагмент элементов». У меня есть три кнопки-переключателя в этом фрагменте, и я устанавливаю togglebutton.text для каждой из них программно, получая доступ к значениям, хранящимся в общих префах, при первом создании фрагмента. Я также установил имя пользователя текстового дисплея таким же образом. "Добро пожаловать, [имя пользователя]!..."
Когда я перехожу к следующему фрагменту, а затем нажимаю кнопку «Назад», чтобы вернуться к «Фрагменту элементов», имя пользователя заполняется правильно, но все togglebutton.text отображают либо «ВКЛ», либо «ВЫКЛ» в зависимости от состояния, в котором они находились. когда мы перешли от «Фрагмента предметов» в первую очередь, который является текстом по умолчанию для кнопки переключения.
Когда я нажимаю кнопку переключения, чтобы изменить ее состояние, правильный текст заполняется, как я и ожидал.
Почему текст не сохраняется при перемещении вперед и назад в стеке?
Мой код:
lass ItemsFragment: Fragment(R.layout.fragment_items) {
private val args: ItemsFragmentArgs by navArgs()
lateinit var loginUserText: TextView
lateinit var userEmail: String
lateinit var varOneButton: TextView
lateinit var varTwoButton: TextView
lateinit var varThreeButton: TextView
private lateinit var buttonEnterItems: Button
lateinit var buttonOneText: String
lateinit var buttonTwoText: String
lateinit var buttonThreeText: String
private var buttonOneState by Delegates.notNull<Boolean>()
private var buttonTwoState by Delegates.notNull<Boolean>()
private var buttonThreeState by Delegates.notNull<Boolean>()
@SuppressLint("ResourceType")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
loginUserText = view.findViewById(R.id.welcomeUserText)
varOneButton = view.findViewById(R.id.toggleButton1)
varTwoButton = view.findViewById(R.id.toggleButton2)
varThreeButton = view.findViewById(R.id.toggleButton3)
buttonEnterItems = view.findViewById(R.id.button_enterItems)
buttonOneState = false
buttonTwoState = false
buttonThreeState = false
// loginUserText.text = args.userName
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
val json = sharedPref.getString("UserData", "")
if (json != null) {
if (json.isNotEmpty()) {
val gson = Gson()
val rd: LoginFragment.UserInfo =
gson.fromJson(json, LoginFragment.UserInfo::class.java)
userEmail = rd.user_email
buttonOneText = rd.var_one
buttonTwoText = rd.var_two
buttonThreeText = rd.var_three
loginUserText.text = "Welcome, ${rd.user_name}! \n\n What did you do yesterday?"
varOneButton.text = buttonOneText
varTwoButton.text = buttonTwoText
varThreeButton.text = buttonThreeText
}
}
varOneButton.setOnClickListener {
buttonOneState = !buttonOneState
varOneButton.text = buttonOneText
}
varTwoButton.setOnClickListener {
buttonTwoState = !buttonTwoState
varTwoButton.text = buttonTwoText
}
varThreeButton.setOnClickListener {
buttonThreeState = !buttonThreeState
varThreeButton.text = buttonThreeText
}
buttonEnterItems.setOnClickListener {
val bOneStateOut = buttonOneState.toString()
val bTwoStateOut = buttonTwoState.toString()
val bThreeStateOut = buttonThreeState.toString()
val current = LocalDateTime.now()
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val date = current.format(formatter)
print(date)
sendPostRequestData(
"POST", "postdata",
"email", userEmail,
"date", date,
"buttonOneState", bOneStateOut,
"buttonTwoState", bTwoStateOut,
"buttonThreeState", bThreeStateOut
)
}
}
Что я ожидаю: введите описание изображения здесь
Что я получаю: