Knyta preferences till objekt

Diskussion i 'Frågor, support och diskussion' startad av crazyrobban, 13 aug 2010.

  1. crazyrobban

    crazyrobban Adult Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    582
    Mottagna gillanden:
    32
    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge

    MINA ENHETER

    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge
    Platta:
    Samsung Galaxy Tab Pro 8.4
    ROM:
    CM 13
    Ok, så jag har en preferencescreen med en checkbox, och jag har en app fylld med sidor och knappar, där varje knapp gör väsen av sig när man trycker på den. Och tanken är att checkboxen i preferences ska kunna slå av och på ljudet.

    Hur knyter jag min checkbox i preferencescreen till specifika attribut till alla objekt i min app?

    Jag har hittat gott om tutorials på nätet om hur man gör menyer och preference skärmar, men inget om hur de faktiskt används när man skapat dem.

    Någon som vill och kan hjälpa en newbie? :innocent:
     
  2. sniff

    sniff Youth Droid Medlem

    Blev medlem:
    3 okt 2009
    Inlägg:
    132
    Mottagna gillanden:
    0

    MINA ENHETER

    antar att det är något liknande det nedan du söker efter?

    Kod:
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
    int test = 0;
    test = Integer.parseInt(prefs.getString("test", "1000"));
    
     
  3. yrara

    yrara Teen Droid Medlem

    Blev medlem:
    30 sept 2009
    Inlägg:
    428
    Mottagna gillanden:
    8

    MINA ENHETER

    Uh.

    varför inte

    Kod:
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
    int test = prefs.getInt("test", 1000);
    
    nollan kommer inte användas, eftersom du skickar in ett default-värde...
     
  4. crazyrobban

    crazyrobban Adult Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    582
    Mottagna gillanden:
    32
    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge

    MINA ENHETER

    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge
    Platta:
    Samsung Galaxy Tab Pro 8.4
    ROM:
    CM 13
    Tack båda två! Men jag greppar inte riktigt. :ehm:

    Kod:
            Button button2 = (Button) findViewById(R.id.button_test);
    		button2.setOnClickListener(new OnClickListener() {
    			
            	public void onClick(View v) {
            		Intent infobuttonIntent = new Intent(main.this,InfoAct.class);
            	    startActivity(infobuttonIntent);
            	    // Hur satan får jag ljudet att enbart spela när ljud är aktiverat?
            	    MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.buttonsound_1);
            	    mp.start();
            		
            	}
            });
     
  5. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Du har ju deklarerat en key för den inställningen

    exempel:
    HTML:
    <CheckBoxPreference
     android:key="thisisthekey"
     android:title="Checkbox"
     android:defaultValue="true"
     android:summary="Change The CheckBox Status here, it will be saved in Preference" />
    Du läser ut den med följande kod:
    Kod:
    SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
     Boolean doSound = prefs.getBoolean("thisisthekey", true);
     
  6. crazyrobban

    crazyrobban Adult Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    582
    Mottagna gillanden:
    32
    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge

    MINA ENHETER

    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge
    Platta:
    Samsung Galaxy Tab Pro 8.4
    ROM:
    CM 13
    Ok, nu är det nära. :)
    Nu ska jag bara förstå hur det där påverkar just ljudet i min kod.

    Säg att jag kopierar in det i min kod och ändrar till den key jag deklarerat i min preferences.xml, vart ska jag ha in koden för att den bara ska påverka ljudet?

    Kommer det inte bli så att jag stänger av ljudet -och- knappen i frågas huvudfunktion? Om jag fattat rätt så är det this.getBaseContext som avgör vad som ska påverkas?

    Tack för all hjälp
     
  7. yrara

    yrara Teen Droid Medlem

    Blev medlem:
    30 sept 2009
    Inlägg:
    428
    Mottagna gillanden:
    8

    MINA ENHETER

    doSound i woodys exempel är en Boolean. En variabel som är true eller false. Ifall du använder nyckeln som du har i din checkbox preference, så kommer doSound att vara true när boxen är ikryssad, och false när den inte är det. Exakt vad för kod du ska skriva beror på vad som står i din checkbox och vad du vill ska hända i ditt program, men i korta drag:
    Kod:
    if( doSound ) {
      // kod som körs när checkboxen är ikryssad, t.ex. spela upp ljud
    } else {
      // kod som körs när checkboxen inte är ikryssad
      // du kan ta bort else-blocket helt ifall du inte vill göra ngt speciellt i dessa fall
      // här kan du t.ex. dölja knappen, eller vad du kan tänkas vilja göra...
    }
    Till exempel
    Kod:
    if( doSound ) {
        mp.start();
    }
    Ifall inte checkboxen är ikryssad, så kommer inte spelaren att starta.
     
  8. crazyrobban

    crazyrobban Adult Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    582
    Mottagna gillanden:
    32
    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge

    MINA ENHETER

    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge
    Platta:
    Samsung Galaxy Tab Pro 8.4
    ROM:
    CM 13
    Tack som fasen! :)

    Nu fungerar det. Dock sub-optimalt..

    Jag har en "main" sida, och ett par sub-sidor.
    Varje gång jag trycker på någon av mina "tillbaka" knappar så avslutas sub-aktiviteten och jag kommer tillbaka till main.

    Problemet är att main kollar bara mot checkboxen i uppstarten av main-aktiviteten. Så jag måste starta om appen för att ljudet ska slås av/på.
    Alternativt skriva om appen så att det körs en ny main när jag går tillbaka från sub-sidorna. :-/

    Edit:
    Eller om jag kan få main-aktiviteten att köras på nytt efter jag lämnar preference skärmen... Men då måste jag köra override på back knappen och det kan väl inte vara någon smart lösning :-S
     
    Last edited: 13 aug 2010
  9. yrara

    yrara Teen Droid Medlem

    Blev medlem:
    30 sept 2009
    Inlägg:
    428
    Mottagna gillanden:
    8

    MINA ENHETER

  10. crazyrobban

    crazyrobban Adult Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    582
    Mottagna gillanden:
    32
    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge

    MINA ENHETER

    Operatör:
    DGC
    Telefon:
    Galaxy Note Edge
    Platta:
    Samsung Galaxy Tab Pro 8.4
    ROM:
    CM 13
    Fair enough. :-)

    Du gav mig precis en tokig mängd mer förståelse i och med att jag aldrig sett förbi onCreate.

    Hur som helst, nu kör jag alltså
    Kod:
        public void onWindowFocusChanged(boolean hasWindowFocus) {
    	    SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
    	    Boolean doSound = prefs.getBoolean("LjudPref", true);
    	}
        
    Nu kan inte mina knappar komma åt doSound och Eclipse hävdar att doSound inte används. Ska jag flytta in hela koden innanför onWindowFocusChanged ?

    Jag prövar det nu...

    Edit:
    Det fixade det, och när jag inte använder röven för att titta så ser jag ju att du skrev att jag skulle få in hela koden där. ^^
     
    Last edited: 13 aug 2010