So I recently joined the Kotlin train, and I have a fragment which changes the theme of my android app, I made the fragment restart after successfully switching theme, and then from the MainActivity reopen the fragment using a bundle set earlier in the fragment.
All these work. The problem i'm having is I also tried to change the android:summary field after switching theme, but each time the activity restarts, it switches back to the default summary value
What could I be doing wrong?
SettingsFragment.kt
findPreference(getString(R.string.key_dark_theme)).setOnPreferenceChangeListener { preference, newValue ->
preference.isEnabled = false
val switchPreference = preference as SwitchPreference
val intent = activity!!.intent
val tempBundle = Bundle()
intent.putExtra("bundle", tempBundle)
Thread {
val changeTheme = newValue as Boolean
try {
activity!!.runOnUiThread {
switchPreference.isChecked = changeTheme
switchPreference.summary = "On" //this clears once I restart the activity
activity!!.finish()
activity!!.startActivity(intent)
activity!!.overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out)
}
} catch (e: Exception) {
e.printStackTrace()
}
activity!!.runOnUiThread {
switchPreference.isEnabled = true
}
}.start()
false
}
You can use layout instead: if you want to use two summaries for on and off state of switch preference you can use these properties:
<SwitchPreference
android:summaryOff="@string/summary_off"
android:summaryOn="@string/summary_on" />
But if you want to use Java or Kotlin: summary which is set programmatically will not be saved
if you want to keep it you have to set it always in onCreate