Hur sparar du preferences??

Diskussion i 'Frågor, support och diskussion' startad av DreamHawk, 24 juli 2011.

  1. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6.064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    Sitter och försöker få till preferences på min application.

    Har fått det att fungera lite smått, det jag lyckats med är att gömma en knapp. Detta för att lära mig :).

    Men för att aktivera preferencen, måste jag starta om appen. Detta är ju inte smidigt.

    Funderar på någon onResume lösning?


    Sent from my Nexus S using Tapatalk
     
  2. andred

    andred Kid Droid Medlem

    Blev medlem:
    21 december 2010
    Inlägg:
    98
    Mottagna gillanden:
    9

    MINA ENHETER

    Hej

    Det går att registrera en lyssnare på en SharedPreferences, så att du anropas när den förändras. Så här reggar man lyssnaren:

    Kod:
    SharedPreferences prefs = getSharedPreferences(PREFERENCES_FILENAME, Context.MODE_PRIVATE);
    prefs.registerOnSharedPreferenceChangeListener(this);
    
    Den aktuella klassen implementerar sedan metoden onSharedPreferenceChanged(). I den metoden är det bara att kolla värdena på de olika prefs du har, och agera utifrån det.
     
    Last edited: 24 juli 2011
  3. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6.064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    Har försökt här nu i ett par timmar... Jag förstår fortfarande inte vad som ska vara vart :S.

    får till detta min "main.class"
    Kod:
            SharedPreferences preferences = 
            	PreferenceManager.getDefaultSharedPreferences(this);
            preferences.registerOnSharedPreferenceChangeListener((OnSharedPreferenceChangeListener) this);
            
    försöker med detta i main.class
    Kod:
    boolean add_button = preferences.getBoolean("add_button", true);
            if(add_button == true) { button.setVisibility(1); }
            else { button.setVisibility(4); }
    
    och såhär #2263654 - Pastie ser min Prefs.class ut.. Jag har stirrat mig blind på allt för många alternativ på stackoverflow etc... jag får inte till det...
     
  4. andred

    andred Kid Droid Medlem

    Blev medlem:
    21 december 2010
    Inlägg:
    98
    Mottagna gillanden:
    9

    MINA ENHETER

    Alla aktiviteter som påverkas av inställningar bör implementera OnSharedPreferenceChangeListener, så att inställningarna slår igenom så fort användaren sparar dem. Exempel: om du har en knapp i ditt huvudfönster som du vill visa/dölja beroende på en inställning så ska den aktivitet som innehåller denna knapp implementera OnSharedPreferenceChangeListener, och alltså ha metoden onSharedPreferenceChanged().

    För att fortsätta exemplet så kollar du alltså i onSharedPreferenceChanged() värdet på inställningen för knappen, och visar/döljer den utifrån det. Du gör förmodligen samma sak i din onCreate().

    I ditt fall vill du förmodligen göra något i denna stil i din aktivitet med knappen:

    Kod:
            @Override
    	public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    		if ("add_button".equals(key)) {
    			boolean showButton = prefs.getBoolean("add_button", false);
    			Button button = (Button)findViewById(R.id.dinKnapp);
    			if (showButton) {
    				button.setVisibility(View.VISIBLE);
    			} else {
    				button.setVisibility(View.GONE);
    			}
                    }
    	}
    
    Din Prefs-klass behöver INTE implementera OnSharedPreferenceChangeListener.
     
    Last edited: 24 juli 2011
  5. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6.064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    Tack för din hjälp.

    Får detta
    Kod:
    void is an invalid type for the variable onSharedPreferenceChanged
    

    Kod:
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key)
    
    Vet inte vad jag ska göra åt det :(
     
  6. andred

    andred Kid Droid Medlem

    Blev medlem:
    21 december 2010
    Inlägg:
    98
    Mottagna gillanden:
    9

    MINA ENHETER

    Det är ju en metod, ingen variabel. Alltså måste du skriva själva metoden. Du bör nog läsa på lite mer java egentligen innan du programmerar Android. Alltså:

    Kod:
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        // Skriv din kod här, som jag visade i exemplet.
    }
    
     
  7. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6.064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    @andred

    Ber om ursäkt för missförståndet.

    Jag borde läsa på mer om både och. Och jag har läst 1 år med javaprogrammering. Dock behöver jag refresha på javan.

    Efter att ha lagt #2263891 - Pastie längst ner i koden iprincip, fick jag det att fungera. Så jag tackar så ödmjukast :)