Je veux détecter quand un Preference
contenu dans un ListView
est cliqué, afin de pouvoir lancer une intention de gérer cette sélection.
J'aurais fait comme ceci dans mon fichier de mise en page XML
:
<Preference Android:title="About" Android:key="myKey"></Preference>
Et ce qui suit dans mon code Java
:
Preference myPref = (Preference) findPreference("myKey");
myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
//open browser or intent here
}
});
Mais la méthode public Preference findPreference (CharSequence key)
est obsolète.
Fragments
peut-il m'aider à mieux faire mon travail? Cliquez ici: Préférences sans méthodes obsolètes .Ici, vous pouvez vérifier la structure de mise en page XML
de mon activité et un instantané de l'application:
XML:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<Preference
Android:key="about"
Android:title="@string/titleAbout"
Android:summary="@string/summaryAbout"
/>
<Preference
Android:key="labelTaxonomy"
Android:title="@string/titleLabelTaxonomy"
Android:summary="@string/summaryLabelTaxonomy"
/>
</PreferenceScreen>
SNAPSHOT:
Après avoir cliqué sur la (à propos de la taxonomie A propos de (ou de la taxonomie des étiquettes d’accès) Preference
, je voudrais ouvrir une intent
de quelque sorte que ce soit (cela pourrait aussi être une vidéo ou autre chose ... les noms sont trompeurs).
Existe-t-il un équivalent non déconseillé?
Si vous utilisez PreferenceFragment
sur des périphériques API de niveau 11+, vous appelez findPreference()
dessus. Sinon, appelez findPreference()
sur votre PreferenceActivity
, car vous n’avez pas le choix.
Si non, si je l'utilise quand même?
Ça va marcher.
Comment les fragments peuvent-ils m'aider à mieux faire mon travail?
L'API de niveau 11+ a introduit PreferenceFragment
comme une autre façon de construire le contenu d'une PreferenceActivity
. Vous pouvez les utiliser, mais si vous continuez à utiliser des appareils plus anciens, vous ne pouvez pas utiliser PreferenceFragment
pour ces appareils.
Cela étant dit:
Je veux détecter quand une préférence contenue dans une ListView est cliquée, afin de pouvoir lancer une intention de gérer cette sélection.
Vous n'avez pas besoin de code Java pour cela. Utilisation:
<PreferenceScreen
Android:title="@string/title_intent_preference"
Android:summary="@string/summary_intent_preference">
<intent Android:action="Android.intent.action.VIEW"
Android:data="http://www.Android.com" />
</PreferenceScreen>
(comme indiqué dans le JavaDocs pour PreferenceActivity
)
Cela créera une entrée dans l'interface utilisateur des préférences qui, une fois cliquée, lancera une activité avec la variable Intent
spécifiée.
Si vous utilisez des fragments, vous pouvez utiliser la méthode "findPreference ()" sur la base d'un fragment de préférences.
public class CustomActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom);
CustomFragment customFragment = (CustomFragment) getFragmentManager().findFragmentById(R.id.custom_fragment);
EditTextPreference textPreference = (EditTextPreference) customFragment.findPreference("preference_key");
textPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
//open browser or intent here
}
});
}
}
peut-être que docs link ne sont pas clairs. Mais utiliser cette fonctionnalité est très simple. par exemple, vous pouvez l'utiliser comme une page Twitter comme celle-ci
<PreferenceCategory Android:title="Share" >
<PreferenceScreen
Android:title="Twitter"
Android:summary="Follow me at Twitter">
<intent Android:action="Android.intent.action.VIEW"
Android:data="https://Twitter.com/" />
</PreferenceScreen>
</PreferenceCategory>
il n'a pas besoin de code Java. Merci à CommonsWare!
2018 UPDATE Aujourd'hui, la méthode onPreferenceTreeClick
doit être remplacée dans le fragment Préférence à cette fin. Par exemple:
public class MySettingsFragment extends PreferenceFragment {
@Override
public boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen,
Preference preference)
{
String key = preference.getKey();
if(key.equals("someKey")){
// do your work
return true;
}
return false;
}
}