Wie setze ich ein neues Hintergrundbild basierend auf der Auswahl des Benutzers in Einstellungen ein?

StackOverflow https://stackoverflow.com/questions/8317170

Frage

Ich benutze Andengine, um ein Live -Tapeten und SharedPreferenzen für die Einstellungen zu erstellen.

Hier ist meine XML -Datei, in der die verschiedenen Einstellungen gehostet werden, die ein Benutzer für das Live -Wallpaper auswählen kann:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
                android:title="Main Settings">
           <ListPreference
           android:title="Background Image"
           android:summary="Set the background image for the wallpaper"
           android:key="listPref"
           android:defaultValue="1"
           android:entries="@array/background"
           android:entryValues="@array/background_values" /> 
        </PreferenceCategory>
</PreferenceScreen>

Mein @Array sieht so aus:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="background">
    <item>Background 1</item>
    <item>Background 2</item>
</string-array>

<string-array name="background_values">
    <item>1</item>
    <item>2</item>
</string-array>

</resources>

Meine Haupttapetenaktivität verwendet dies, um zu prüfen, ob ein Benutzer eine neue Einstellung ausgewählt hat:

    public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
    {            

        if (prefs.getString("listPref", "Background 1").equals(2))
                {
            Toast.makeText(this, "test", Toast.LENGTH_LONG).show();

    final Scene scene = new Scene();
    final AutoParallaxBackground autoParallaxBackground = new AutoParallaxBackground(
                    0, 0, 0, 5);
    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(2.7f,
                    new Sprite(0, 0, this.mAutoParallaxCustomBackground)));
    scene.setBackground(autoParallaxBackground);
                }
    }

Meine Frage lautet ... Nehmen wir an, ich habe 10 unterschiedliche Hintergründe zur Auswahl: Hintergrund 1, Hintergrund 2, Hintergrund 3 ... usw. Muss ich weiter machen, wenn sonst Anweisungen wie in der obigen Methode, um sich darum zu kümmern können Für alle Hintergründe in den Einstellungen? Oder vermisse ich irgendwo einen Schritt? Es muss eine einfachere Möglichkeit geben, herauszufinden, auf welchen Hintergrund der Benutzer in den Einstellungen geklickt hat.

Muss ich etwas mit den 'background_values' in meiner XML -Datei machen?

Und ja, mir ist klar, dass meine If -Aussage falsch ist, aber ich habe noch nicht herausgefunden, wie ich sie richtig funktioniert.

War es hilfreich?

Lösung

Fand die Soulution:

Erstellt dies:

    @Override
    public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
    {           
            settingsChanged = true;
    }

Hinzugefügt:

    @Override
    public void onResume(){
        super.onResume();
        if(settingsChanged)
        {
                BuildScene();
                settingsChanged = false;
        }
    }

(Buildscene ()) ist ein Aufruf in meiner Onloadscene () -Methode.)

Dann habe ich nur benutzerdefiniert, wenn Anweisungen in der Methode Buildscene () herausgefunden werden, welche Option der Benutzer derzeit verwendet, und dann das neue Bild angewendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top