setAutoLinkMask et setLinksClickable
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" :
Code:
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));
} |
La classe EditSettings ne fait rien de particulier à part afficher le fichier xml.
Fonction de récupération des préférences : setSettingsApp() lancée dans onResume()
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 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);
} |
Fichier settings.xml :
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
|
<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> |
Manifeste : Pour rendre l'appli disponible sur un maximum de plateformes, je fixe à 2 la version SDK mini.
Code:
<uses-sdk android:minSdkVersion="2" />
Si vous avez besoin d'autre chose, n'hésitez pas à demander.
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.