webentwicklung-frage-antwort-db.com.de

androidx.preference.PreferenceScreen wurde beim Erstellen des Bildschirms "Einstellungen" nicht gefunden

Nachdem Sie dieses Tutorial befolgt haben, um einen Bildschirm für Einstellungen zu erstellen, scheint es ein Problem beim Aufblasen der Klasse 'androidx.preference.PreferenceScreen' zu geben. Warum wird es nicht gefunden, wenn meine Voreinstellungen im Ordner res/xml deklariert wurden und diesem Projekt die erforderliche Abhängigkeit hinzugefügt wurde? 

Die minSdkVersion meiner App ist 24.

Fehler beim Aufblasen der Klasse (nicht gefunden) androidx.preference.PreferenceScreen

Abhängigkeiten

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>

Aktivitätslayout

<?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" />

Aktivitätsklasse

class MySettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.settings_container, MySettingsFragment())
                .commit()
    }
}

Fragmentklasse

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.app_preferences)
    }
}
3
MacaronLover

Wenn Sie AndroidX verwenden, sollten Sie Ihre Abhängigkeiten aktualisieren:

implementation "androidx.legacy:legacy-preference-v14:1.0.0"
implementation "androidx.preference:preference:1.0.0"

Das Erbe gilt für den alten com.Android.support:preference-v14, während der andere für com.Android.support:preference-v7 ist.

Wenn Sie nicht AndroidX, sondern Android Support-Bibliotheken verwenden, importieren Sie keine AndroidX-Widgets in Ihr XML.

3
shkschneider

Bei Unterstützungsbibliotheken 28.0.0 sollten Sie einen XML-Code wie folgt verwenden: (NOTEremove androidx für diesen Fall)

<?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>

und gradle Konfigurationsdatei:

implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support:preference-v7:28.0.0'

und die Implementierung wie folgt: (NOTE: set statt add und 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);
    }
}

In der oficial Dokumentation haben sie androidx im Beispielcode. Vielleicht ist das das Problem, Sie brauchen es nicht mit Unterstützungsbibliotheken

0
Hpsaturn

wenn Sie PreferenceFragmentCompat verwenden möchten, müssen Sie die folgende Abhängigkeit implementieren.

implementation 'androidx.preference:preference:1.0.0
0
Popal