2015-11-02 11 views
8

Ho un semplice widget adesivo che consente all'utente di selezionare uno degli adesivi dopo aver posizionato il widget. Il mio problema è che una volta riavviato il dispositivo, l'adesivo ritorna a quello predefinito. Come posso garantire che l'adesivo selezionato dall'utente rimanga indipendentemente dal fatto che il dispositivo venga riavviato o meno? Un esempio o spinta nella giusta direzione sarebbe molto utile. Non sto cercando nessuno che lo faccia per me, solo per essere istruito su come fare per farlo. Grazie.Come garantire che l'immagine selezionata dall'utente non cambi dopo il riavvio Android?

EDIT Codice Incluso

Non sono sicuro, ma penso che sto andando su questo tutto sbagliato. Non ho idea di come incorporare SharedPreferences nel modo in cui lo ho ora. Qualcuno potrebbe darmi un esempio di come dovrei fare per fare questo con almeno una delle immagini che sto usando per favore?

public class SpraycanConfig extends Activity 
{ 
int xawID; 
AppWidgetManager xawm; 
Context xc; 
EditText xinfo; 
//EasyTracker easyTracker; 

protected void onCreate(Bundle paramBundle) 
{ 
super.onCreate(paramBundle); 

Crashlytics.start(this); 

setContentView(R.layout.scconfiglayout); 



    this.xc = this; 
    Bundle localBundle = getIntent().getExtras(); 
    if (localBundle != null) { 
    this.xawID = localBundle.getInt("appWidgetId", 0); 
    } 
    for (;;) 
    { 
    this.xawm = AppWidgetManager.getInstance(this.xc); 
    ImageButton localImageButton1 = (ImageButton)findViewById(R.id.normal); 
View.OnClickListener local1 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.normal); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 
    } 
}; 
localImageButton1.setOnClickListener(local1); 
ImageButton localImageButton2 = (ImageButton)findViewById(R.id.belton); 
View.OnClickListener local2 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.belton); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton2.setOnClickListener(local2); 
ImageButton localImageButton3 = (ImageButton)findViewById(R.id.gold); 
View.OnClickListener local3 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.gold); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton3.setOnClickListener(local3); 
ImageButton localImageButton4 = (ImageButton)findViewById(R.id.hardcore); 
View.OnClickListener local4 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.hardcore); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton4.setOnClickListener(local4); 
ImageButton localImageButton5 = (ImageButton)findViewById(R.id.ironlak); 
View.OnClickListener local5 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.ironlak); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton5.setOnClickListener(local5); 
ImageButton localImageButton6 = (ImageButton)findViewById(R.id.krylon); 
View.OnClickListener local6 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.krylon); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton6.setOnClickListener(local6); 
ImageButton localImageButton7 = (ImageButton)findViewById(R.id.mtn94); 
View.OnClickListener local7 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.ninetyfour); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton7.setOnClickListener(local7); 
ImageButton localImageButton8 = (ImageButton)findViewById(R.id.rusto); 
View.OnClickListener local8 = new View.OnClickListener() 
{ 
    public void onClick(View paramAnonymousView) 
    { 
    RemoteViews localRemoteViews = new RemoteViews(xc.getPackageName(), R.layout.main); 
    localRemoteViews.setImageViewResource(R.id.imageview, R.drawable.rusto); 
    xawm.updateAppWidget(xawID, localRemoteViews); 
    Intent localIntent = new Intent(); 
    localIntent.putExtra("appWidgetId", xawID); 
    setResult(-1, localIntent); 
    finish(); 

    } 
}; 
localImageButton8.setOnClickListener(local8); 

return; 

    } 

} 

@Override 
protected void onStart() { 
    super.onStart(); 

} 

@Override 
protected void onStop() { 
    super.onStop(); 

} 



} 
+2

Penso che sia necessario salvare quell'immagine nella preferenza di condivisione e ad ogni avvio è necessario controllare se è presente un'immagine all'interno della preferenza condivisa utilizzata che altrimenti avvia un nuovo avvio. – dex

risposta

2

esattamente così:

protected void onCreate(Bundle paramBundle) 
{ 
    super.onCreate(paramBundle); 
    SharedPreferences sharedPreferences = getSharedPreferences("myPref", 0); 

    // get the last chosen sticker 
    int sticker = sharedPreferences.getInt("chosenSticker", R.drawable.normal); //the .normal is the default value in case the user didn't choose one. 
    myView.setImageViewResource(R.id.imageview, sticker); //now you can use it 


    // store user's choice for example: 
    View.OnClickListener local2 = new View.OnClickListener() 
    { 
     public void onClick(View paramAnonymousView) 
     { 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putInt("chosenSticker", R.drawable.belton); 
      editor.apply(); 

      // your rest of your code here ... 
     } 
    } 
} 
+0

Grazie @Eliran Kuta. Questo è esattamente quello che stavo cercando. Questo mi dà una prospettiva migliore delle cose. Dovrei essere in grado di ottenere tutto ciò che funziona con quell'esempio. –

+0

Grande. Felice di aiutare –

3

SharedPreferences sarebbe la scelta migliore.

In realtà è possibile salvare l'immagine selezionata in qualsiasi modo di archiviazione utilizzato in Android.

2

Il mio modo preferito è utilizzare SharedPreferences.

Questo è come si dovrebbe andare a questo proposito:

1) inizializzare un oggetto SharedPreferences. Utilizza un tag per la classificazione, nel caso in cui desideri archiviare valori che influiscono su aspetti diversi della tua app.

SharedPreferences myPrefs = getSharedPreferences("Stickers", MODE_PRIVATE); 

2) Recuperare i valori associati. Nel tuo caso potrebbe essere un URL o un ID risorsa. La funzione richiede un secondo valore che verrebbe restituito se la preferenza non è stata ancora impostata.

myPrefs.getString("SelectedSticker", "default.jpg"); 

3) Memorizzare un nuovo valore o sostituirne uno esistente.

public void setStickerPreference(String stickerURL) { 
    // retrieve editor 
    SharedPreferences.Editor myPrefsEditor = myPrefs.edit(); 
    // save or modify the field 
    myPrefsEditor.putString("SelectedSticker", stickerURL); 
    // commit changes 
    prefsEditor.commit(); 
} 

Spero che questo aiuti!

+0

scusa, la formattazione del codice non sembra funzionare. Proverò a modificarlo più tardi ... – Pol

+0

ora ha funzionato :) – Pol

0

permanenti nell'immagine o di una logica si può andare per sapere, se l'utente ha effettivamente cambiato.

La tua domanda su dove mettere sharedpreference, ben messo nella funzione di codice che cambia l'immagine o di cosa stai parlando, puoi usare I/O per scrivere in un archivio temporaneo diciamo Context.getCacheDir() e tu può persistere la tua immagine lì, quindi nel tuo onResume() controlla anche che il file esista con File.exist()

Ricorda anche di eliminarlo quando hai finito di accedervi.

Problemi correlati