Bonjour,
Je reviens vers vous suite à un souci que je ne parviens pas à résoudre seul.
J'aimerais modifier les propriétés d'un TextView afin de rendre les liens qu'il contient visibles et/ou cliquables en passant par un système de préférences accessible à l'utilisateur. Au démarrage de l'application, ces propriétés sont toujours bien prises en compte quelque soit leurs configurations. Mais pendant l'utilisation de l'application, j'ai deux cas de figure.
1 - Les liens ne se "désaffichent" plus (même en repassant la préférence à "false".)
2 - Lorsque je définie les liens comme étant cliquables, le premier retour sur mon TextView ne le prend pas en compte alors que si je retourne dans les préférences et que j'en ressors sans rien faire, ils le deviennent. Par contre, ils le resteront ensuite quelque soit les modifications que j'apporterai jusqu'à fermeture et réouverture de l'application.
J'ai testé des tas de solutions mais rien n'y fait.
Je vous fournis les bouts de code nécessaires à la compréhension du problème (les variables sont bien déclarées et en les testant elles donnent bien les bonnes valeurs).
Fonction de lancement de la partie "Préférence" :
La classe EditSettings ne fait rien de particulier à part afficher le fichier xml.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Override public boolean onOptionsItemSelected(MenuItem mnuItem) { switch (mnuItem.getItemId()) { case R.id.mnu_settings: startActivity(new Intent(this, EditSettings.class)); return true; } return(super.onOptionsItemSelected(mnuItem)); }
Fonction de récupération des préférences : setSettingsApp() lancée dans onResume()
Fichier settings.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 objSettings = PreferenceManager.getDefaultSharedPreferences(this); m_bSettingLinkMask = objSettings.getBoolean("set_cb_link_mask", false); m_iLinkify = 0; if (m_bSettingLinkMask) { Boolean bLinkify = objSettings.getBoolean("set_cb_link_mask_web", true); if (bLinkify) { m_iLinkify = m_iLinkify + 1; } bLinkify = objSettings.getBoolean("set_cb_link_mask_email", true); if (bLinkify) { m_iLinkify = m_iLinkify + 2; } bLinkify = objSettings.getBoolean("set_cb_link_mask_phone", true); if (bLinkify) { m_iLinkify = m_iLinkify + 4; } bLinkify = objSettings.getBoolean("set_cb_link_mask_map", true); if (bLinkify) { m_iLinkify = m_iLinkify + 8; } txtView.setAutoLinkMask(m_iLinkify); Linkify.addLinks(txtView, m_iLinkify); txtView.setLinksClickable(objSettings.getBoolean("set_cb_link_mask_clickable", false)); } else { txtView.setAutoLinkMask(m_iLinkify); Linkify.addLinks(txtView, m_iLinkify); txtView.setLinksClickable(false); }
Manifeste : Pour rendre l'appli disponible sur un maximum de plateformes, je fixe à 2 la version SDK mini.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <PreferenceScreen xmlns:android= "http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title= "@string/set_behavior"> <CheckBoxPreference android:id= "@+id/set_cb_link_mask" android:key= "set_cb_link_mask" android:title= "@string/set_cb_link_mask_title" android:summary="@string/set_cb_link_mask_summary" android:defaultValue="false" /> <CheckBoxPreference android:id= "@+id/set_cb_link_mask_web" android:key= "set_cb_link_mask_web" android:title="@string/set_cb_link_mask_web_title" android:dependency="set_cb_link_mask" android:defaultValue="true" /> <CheckBoxPreference android:id= "@+id/set_cb_link_mask_phone" android:key= "set_cb_link_mask_phone" android:title= "@string/set_cb_link_mask_phone_title" android:dependency="set_cb_link_mask" android:defaultValue="true" /> <CheckBoxPreference android:id= "@+id/set_cb_link_mask_map" android:key= "set_cb_link_mask_map" android:title="@string/set_cb_link_mask_map_title" android:dependency="set_cb_link_mask" android:defaultValue="true" /> <CheckBoxPreference android:id= "@+id/set_cb_link_mask_email" android:key= "set_cb_link_mask_email" android:title= "@string/set_cb_link_mask_email_title" android:dependency="set_cb_link_mask" android:defaultValue="true" /> <CheckBoxPreference android:id= "@+id/set_cb_link_mask_clickable" android:key= "set_cb_link_mask_clickable" android:title= "@string/set_cb_link_mask_clickable_title" android:summary= "@string/set_cb_link_mask_clickable_summary" android:dependency="set_cb_link_mask" android:defaultValue="false" /> </PreferenceCategory> </PreferenceScreen>
Si vous avez besoin d'autre chose, n'hésitez pas à demander.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <uses-sdk android:minSdkVersion="2" />
Voilà, j'espère que vous pourrez mettre le doigt sur mon défaut de raisonnement parce que moi je suis dessus depuis deux jours et je n'avance pas.
Cordialement.
Partager