Après avoir suivi ce tutoriel pour créer un écran de préférences, le problème consistant à gonfler la classe 'androidx.preference.PreferenceScreen' semble poser problème. Pourquoi n'est-il pas trouvé lorsque mes préférences ont été déclarées dans le dossier res/xml
et que la dépendance nécessaire a été ajoutée à ce projet?
Le minSdkVersion de mon application est 24.
Erreur de gonflage de la classe (introuvable) androidx.preference.PreferenceScreen
dépendances
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support:cardview-v7:28.0.0'
implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
implementation 'com.Android.support:preference-v7:28.0.0'
implementation 'com.Android.support:recyclerview-v7:28.0.0'
implementation 'com.Android.support:support-v4:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
}
res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<CheckBoxPreference
Android:key="preference_a"
Android:defaultValue="false"
Android:title="Preference A" />
</androidx.preference.PreferenceScreen>
Mise en page de l'activité
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/settings_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".MySettingsActivity" />
Classe d'activité
class MySettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, MySettingsFragment())
.commit()
}
}
Classe de fragment
class MySettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.app_preferences)
}
}
Si vous utilisez AndroidX, vous devez mettre à jour vos dépendances:
implementation "androidx.legacy:legacy-preference-v14:1.0.0"
implementation "androidx.preference:preference:1.0.0"
L'héritage est pour l'ancien com.Android.support:preference-v14
tandis que l'autre est pour com.Android.support:preference-v7
.
Si vous n'utilisez pas AndroidX mais les bibliothèques de support Android, n'importez pas de widgets AndroidX dans votre XML.
Avec les bibliothèques de support 28.0.0
, vous devriez avoir un code XML comme celui-ci: (NOTE remove androidx
dans ce cas)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.Android.com/apk/res-auto">
<CheckBoxPreference
Android:key="preference_a"
Android:defaultValue="false"
Android:title="Preference A" />
</PreferenceScreen>
et gradle
fichier de configuration:
implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support:preference-v7:28.0.0'
et l'implémentation comme ceci: (NOTE: set
au lieu de add
et rootKey
):
public class SettingsFragment extends PreferenceFragmentCompat {
public static final String TAG = SettingsFragment.class.getSimpleName();
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
Dans la documentation officielle , ils ont androidx dans l'exemple de code, c'est peut-être le problème, vous n'en avez pas besoin avec les bibliothèques de support
si vous voulez utiliser PreferenceFragmentCompat
, vous devez implémenter la dépendance suivante.
implementation 'androidx.preference:preference:1.0.0