ok mais où mettre le background pour qu'à l'action de l'item sélectionné dans la listPreferences il me choisisse celui-ci?
Version imprimable
ok mais où mettre le background pour qu'à l'action de l'item sélectionné dans la listPreferences il me choisisse celui-ci?
dans l'activity gérant les préférences
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.PreferenceActivity; import android.widget.Toast; public class MesPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener{ SharedPreferences pref; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.mespreferences); pref = getPreferenceManager().getSharedPreferences(); pref.registerOnSharedPreferenceChangeListener(this); Preference listpref = (Preference) findPreference("listThème"); listpref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { // ici tu récupères ton item et tu en déduis ton background } } } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { Toast.makeText(this, sharedPreferences.getString(key, ""), Toast.LENGTH_SHORT).show(); } }
J'ai un force close à la sélection de l'item donc je suppose que ce n'est pas la bonne méthode employée ou bien cette partie de code ne vient pas ici mais dans mon activity principale non?Code:
1
2
3
4
5
6 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { String image = pref.getString("listT", "Saphir"); ((ImageView) findViewById(R.drawable.bg_red)).setImageResource(((getResources().getIdentifier(image, "drawable", "com.hades_files_explorer")))); Toast.makeText(this, sharedPreferences.getString(key, ""), Toast.LENGTH_SHORT).show(); } }
Bon j'ai réussi à appliquer un fonds d'écran avec cette fonction là :
Mon seul problème, c'est que lorsque je quitte l'application, le background n'y est plus et il faut que je le re-sélectionne...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.wallpaper: Toast.makeText(LogicielGrille.this, "Fonds d'écran", Toast.LENGTH_SHORT).show(); return true; case R.id.saphir: getWindow().setBackgroundDrawableResource(R.drawable.bg_saphir); return true; case R.id.rubis: getWindow().setBackgroundDrawableResource(R.drawable.bg_rubis); return true;
Pas très utile donc..
Je voudrais que le choix soit enregistré et que lorsqu'on relance mon application, le background précédemment choisit y soit affiché..
Merci pour vôtre aide!
Si tu passes par SharedPreferences le choix de l'utilisateur sera sauvegardé dans celle-ci.
Citation:
J'ai un force close à la sélection de l'item donc je suppose que ce n'est pas la bonne méthode employée ou bien cette partie de code ne vient pas ici mais dans mon activity principale non?
C'est quoi pref , ou tu l'initialises ?Code:
1
2
3
4
5
6 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { String image = pref.getString("listT", "Saphir"); ((ImageView) findViewById(R.drawable.bg_red)).setImageResource(((getResources().getIdentifier(image, "drawable", "com.hades_files_explorer")))); } }
De plus à quoi te sert les variables SharedPreferences sharedPreferences,String key , puisque tu ne les utilises pas .
Pour récupérer les valeurs dans Préférence passe par une fonction static .
Non mais je me suis carrément perdu avec mes listPreferences ... :mouarf:
Je n'arrive pas du tout à gérer cette fonction...:(
Et ça m'agace alors j'ai trouvé une solutions peut-être plus adapté à ce que je veux mais ça n'enregistre pas le choix après avoir quitté l'application..(voir plus haut)
Désolé..
Pour répondre à ta question "c'est quoi pref, où tu l'initialises?"
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 SharedPreferences pref; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.mespreferences); pref = getPreferenceManager().getSharedPreferences(); pref.registerOnSharedPreferenceChangeListener(this); Preference listpref = (Preference) findPreference("listThème"); listpref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { // ici tu récupères ton item et tu en déduis ton background <--- je veux bien mais c'est là que je bloque! :mouarf: puis je ne sais pas comment l'inclure dans ma class ensuite... Je suis un vrai boulet!:roll::roll: } } } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { Toast.makeText(this, sharedPreferences.getString(key, ""), Toast.LENGTH_SHORT).show(); } }
Regarde le lien , cela sera plus facile.
http://www.kaloer.com/android-preferences
Appelle la fonction Taclass.onSharedPreferenceChanged(this) pour récupérer le nom de l'élément choisi , déduis en après le background associé .Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 // pas besoin de l'implement public class MesPreferences extends PreferenceActivity { SharedPreferences pref; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.mespreferences); pref = getPreferenceManager().getSharedPreferences(); pref.registerOnSharedPreferenceChangeListener(this); // fait un listener sur le onChange que si tu veux vérifier si l'utilisateur peut choisir un item } public static String GetTheme(Context context) { SharedPreferences settings = PreferenceManager .getDefaultSharedPreferences(context); return settings.getString("listThème",DEFAULT_THEME); } }
Et si je fais comme ça??
Je te jure je peux pas la sentir cette fonction ! :mouarf:Code:
1
2
3
4
5
6
7
8
9
10
11
12 @Override public boolean onPreferenceChange(Preference preference, Object newValue) { onPreferenceChange(preference, "Defaut"); getResources().getDrawable(R.drawable.bg_defaut); return false; } }); }
Mais sinon en l'appliquant via mon menu "wallpaper", il n'y a pas moen d'enregistrer le choix de l'utilisateur??
8O , si il y aurait un moyen c'est de sauvegarder la valeur choisi dans les préférences , en lui donnant la valeur voulue , ça c'est toujours possible .
Quant au code que tu as posté , il met toujours le background par défault quelque soit la valeur choisi par les préférences ?
Non il me met un ForceClose...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 12-07 16:40:28.734: ERROR/AndroidRuntime(276): FATAL EXCEPTION: main 12-07 16:40:28.734: ERROR/AndroidRuntime(276): java.lang.StackOverflowError 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at com.hades_files_explorer.MesPreferences$1.onPreferenceChange(MesPreferences.java:31) 12-07 16:40:28.734: ERROR/AndroidRuntime(276): at
En même temps je n'avais pas trop fais attention , mais je crois que ton programme boucle 8O.Code:
1
2
3
4
5 @Override public boolean onPreferenceChange(Preference preference, Object newValue) { onPreferenceChange(preference, "Defaut");
Cette ligne n'est pas correct .
Code:onPreferenceChange(preference, "Defaut");
Comment ça mon programme "boucle" ?
Est-ce tout de même la bonne méthode ou bien je fais complètement fausse route?Citation:
Cette ligne n'est pas correct .
Code:onPreferenceChange(preference, "Defaut");
Aurais-tu un exemple concret que tu pourrais aménager avec une partie de mon code stp??
Merci à toi. (encore) :roll:
On tourne en rond.
Le mieux est que tu fasses un tutorial sur les préférences .
http://www.kaloer.com/android-preferences
Essaye de comprendre comment le soft se comporte en débuggant l'appli.