sharedPreferences reset to default value

K

keen

Ambitioniertes Mitglied
10
Hallo,

ich habe gerade etwas mit den sharedPreferences ausprobiert bekomme es aber nicht hin, dass meine defaultValues aus der XML Datei gesetzt werden.

Ich habe folgende Dateien:
preferences.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="VirusTotal">

        <EditTextPreference
            android:title="Virustotal public API-Key"
            android:summary="your own virustotal.com public api key"
            android:key="apiKey"
            android:defaultValue="@string/default_apikey"/>

        <Preference android:title="www.virustotal.com" android:icon="@drawable/ic_security_black_24dp" android:summary="open in webbrowser">
            <intent android:action="android.intent.action.VIEW" android:data="http://www.virustotal.com" />
        </Preference>

    </PreferenceCategory>

</PreferenceScreen>

settings_menu.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/resore_defaults"
        android:title="Resotre default values"
        app:showAsAction="never"/>

</menu>

SettingsActivity.kt
Code:
package dl.apps.network.contentlength

import android.content.Intent
import android.os.Bundle
import android.os.PersistableBundle
import android.preference.PreferenceManager
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import kotlinx.android.synthetic.main.toolbar.*

/**
 * Created by Daniel on 05.02.2018.
 */
class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)
        setSupportActionBar(toolbar)
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.settings_menu, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        when(item?.itemId){
            R.id.resore_defaults -> {
                val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext)
                sharedPreferences.edit().apply {
                    clear()
                    commit()
                }
                Toast.makeText(this, "default values in use", Toast.LENGTH_SHORT).show()
                return true
            }
            else -> {
                return super.onOptionsItemSelected(item)
            }
        }
    }

}


SettingsFragment.kt
Code:
package dl.apps.network.contentlength

import android.os.Bundle
import android.preference.PreferenceFragment

/**
 * Created by Daniel on 05.02.2018.
 */
class SettingsFragment : PreferenceFragment(){

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        addPreferencesFromResource(R.xml.preferences)
    }
}


Damit habe ich jetzt zwei Probleme...
1. es werden zwar die Werte aus den sharedPrefences gelöscht, wenn man im Menu auf das Item klickt aber die Werten aus dem XML-File werden nicht automatisch übernommen.
2. in meinen Settings werden die default Werte erst angezeigt, wenn die Acitivity nochmals aufrufe.



(Strings und Imports habe ich noch nicht optimiert, ich möchte erstmal die gewünschte Funktion erreichen)
 
Ich habe beide Probleme gelöst.

Mein 'onOptionsItemSelected' habe ich jetzt zum Reset um folgenden Code erweitert.

Code:
finish()
startActivity(intent)
 

Ähnliche Themen

A
Antworten
1
Aufrufe
584
swa00
swa00
D
Antworten
9
Aufrufe
1.767
jogimuc
J
Muecke1982
Antworten
8
Aufrufe
1.034
Skyhigh
Skyhigh
Zurück
Oben Unten