androidx.preference.PreferenceScreen не найден при создании экрана настроек - PullRequest
0 голосов
/ 04 декабря 2018

После выполнения этого урока для создания экрана настроек, кажется, есть проблема с раздуванием класса 'androidx.preference.PreferenceScreen'.Почему он не найден, когда мои предпочтения были объявлены в папке res/xml и в этот проект была добавлена ​​необходимая зависимость?

minSdkVersion моего приложения равно 24.

Ошибка надувания класса (не найдено) androidx.preference.PreferenceScreen

зависимости

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>

Макет активности

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

Класс активности

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

Фрагмент класса

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

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

С библиотеками поддержки 28.0.0 вы должны иметь XML-код, подобный следующему: ( NOTE удалить androidx для этого случая)

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

и gradle файл конфигурации:

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

и реализация, подобная этой: (* ​​1012 * NOTE : set вместо add и 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);
    }
}

В официальная документация , они имеют androidx в примере кода, возможно, в этом проблема, вам не нужно это с библиотеками поддержки

0 голосов
/ 20 февраля 2019

если вы хотите использовать PreferenceFragmentCompat, вы должны реализовать следующую зависимость.

implementation 'androidx.preference:preference:1.0.0
0 голосов
/ 04 декабря 2018

Если вы используете AndroidX, вы должны обновить свои зависимости:

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

Наследие относится к старому com.android.support:preference-v14, а другое - к com.android.support:preference-v7.

Есливы не используете AndroidX, но библиотеки поддержки Android, не импортируете виджеты AndroidX в ваш XML.

...