Domanda

In una delle mie attività ho un ImageButton che al clic cambia la risorsa in background utilizzando setBackgroundResource().Funziona bene in quell'attività, ma quando lascio quell'attività e ci ritorno il pulsante è tornato al suo sfondo predefinito impostato nell'XML.C'è un modo per impostare in modo permanente la risorsa in background su qualcosa fino a quando non si fa nuovamente clic sul pulsante?

È stato utile?

Soluzione

È necessario memorizzare il valore sul pulsante immagine in una variabile statica o condivisa,

Ad esempio dichiarare una variabile

public static int bgresource;
.

Ora sul pulsante IMG Fare clic su

if(something) {
bgresource = R.drawable.img1
} else {
bgresource = R.drawable.img2
}

mylayout.setBackgroundResource(bgresource);
.

e fai anche quanto segue in onResume () dell'attività:

mylayout.setBackgroundResource(bgresource);
.

Altri suggerimenti

Utilizza le preferenze condivise.

Quando si cambia lo sfondo:

getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();

o

getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_2").commit();

e così via.Questo salverà la stringa, descrivendo il tuo background corrente in sharedPreferences.

Nel metodo onCreate è necessario inserire:

String back = getSharedPreferences("background", MODE_PRIVATE).getString("background");

Questo ti riporterà "background_nr_x" dietro. Ora puoi scegliere lo sfondo:

if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...

Nota: questo ripristinerà lo sfondo attualmente selezionato, anche se l'app è stata chiusa.

Salva l'URL / ID dell'immagine che utilizzi come sfondo in SharedPreferences e assicurati di impostarlo ogni volta che viene creata l'attività.In caso contrario, lo sfondo specificato nel file XML verrà utilizzato alla creazione dell'attività la volta successiva.

Dovresti sovrascrivere il metodo Activity onResume(). Fai in modo che l'attività o il pulsante mantenga lo stato (premuto o non premuto) e, con il metodo onResume(), controlla questo stato e cambia lo sfondo.

Puoi usare un trucco come questo:

    //outside the onCreate:
    boolean resourceIsSet = false;

    //inside the onCreate:
    if(!resourceIsset) {
        setBackgroundResource();
        resourceIsset= true;
    }

Oppure puoi utilizzare una SharedPreferences come altre suggerite

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top