diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt index 37ef97d510a1a419c41114414cf55b991c25a845..ea801c0a0ae78e981d273a572b10d35290a9af34 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/client/ClientSettingsActivity.kt @@ -33,7 +33,7 @@ class ClientSettingsActivity : SettingsActivity(ClientSettingsFragment()), when (pref) { is ListPreference -> { val f = ListPreferenceDialogFragmentCompat.newInstance(pref.getKey()) - f.setTargetFragment(fragment, 0) + f.setTargetFragment(actualFragment, 0) f.show(supportFragmentManager, DIALOG_FRAGMENT_TAG) true } diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt index 83ff2456d95e8b6ca0fd012d9b9b5661c9736f74..9c3d317cdbe6536ed98f815b4e2ad7512f720222 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/ServiceBoundSettingsActivity.kt @@ -35,6 +35,7 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu protected open fun fragment(): Fragment? = null private var changeable: Changeable? = null + protected var actualFragment: Fragment? = null @BindView(R.id.toolbar) lateinit var toolbar: Toolbar @@ -48,19 +49,30 @@ abstract class ServiceBoundSettingsActivity(private val fragment: Fragment? = nu setSupportActionBar(toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) - val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) - ?: this.fragment - ?: this.fragment() - if (fragment != null) { - val transaction = supportFragmentManager.beginTransaction() - fragment.arguments = arguments - transaction.replace(R.id.fragment_container, fragment) - transaction.commit() + val existingFragment = savedInstanceState?.let { + supportFragmentManager.getFragment(it, "settings_content") + } + + actualFragment = existingFragment ?: this.fragment ?: this.fragment() + if (existingFragment == null) { + actualFragment?.let { + val transaction = supportFragmentManager.beginTransaction() + it.arguments = arguments + transaction.replace(R.id.fragment_container, it) + transaction.commit() + } } this.changeable = fragment as? Changeable } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + actualFragment?.let { + supportFragmentManager.putFragment(outState, "settings_content", it) + } + } + private fun shouldNavigateAway(callback: () -> Unit) { val changeable = this.changeable if (changeable?.hasChanged() == true) { diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt index 8ed888d19a151ae4f53f686f1acdc1d5667092b7..8827671cf39a9a26cc5da3659f39277fef8c6e2e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/settings/SettingsActivity.kt @@ -34,6 +34,7 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them protected open fun fragment(): Fragment? = null private var changeable: Changeable? = null + protected var actualFragment: Fragment? = null @BindView(R.id.toolbar) lateinit var toolbar: Toolbar @@ -47,19 +48,30 @@ abstract class SettingsActivity(protected val fragment: Fragment? = null) : Them setSupportActionBar(toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) - val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) - ?: this.fragment - ?: this.fragment() - if (fragment != null) { - val transaction = supportFragmentManager.beginTransaction() - fragment.arguments = arguments - transaction.replace(R.id.fragment_container, fragment) - transaction.commit() + val existingFragment = savedInstanceState?.let { + supportFragmentManager.getFragment(it, "settings_content") + } + + actualFragment = existingFragment ?: this.fragment ?: this.fragment() + if (existingFragment == null) { + actualFragment?.let { + val transaction = supportFragmentManager.beginTransaction() + it.arguments = arguments + transaction.replace(R.id.fragment_container, it) + transaction.commit() + } } this.changeable = fragment as? Changeable } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + actualFragment?.let { + supportFragmentManager.putFragment(outState, "settings_content", it) + } + } + private fun shouldNavigateAway(callback: () -> Unit) { val changeable = this.changeable if (changeable?.hasChanged() == true) {