androidx.preference.PreferenceScreen 创建首选项屏幕时未找到
androidx.preference.PreferenceScreen not found when creating Preferences screen
按照 this tutorial 创建首选项屏幕后,class 'androidx.preference.PreferenceScreen' 膨胀似乎有问题。为什么当我的首选项已在 res/xml
文件夹中声明并且必要的依赖项已添加到此项目时找不到?
我的应用的 minSdkVersion 是 24。
Error inflating class (not found)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>
Activity布局
<?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" />
Activity class
class MySettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, MySettingsFragment())
.commit()
}
}
片段class
class MySettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.app_preferences)
}
}
如果您正在使用 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。
有了支持库 28.0.0
你应该有这样的 XML 代码:
(注意 对于这种情况删除 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'
和这样的实现:
(注意: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);
}
}
在 oficial documentation 中,示例代码中有 androidx,也许这就是问题所在,您不需要支持库
如果你想使用 PreferenceFragmentCompat
首先你需要在你的应用级别 gradle.
实现以下依赖
implementation 'androidx.preference:preference:1.0.0
按照 this tutorial 创建首选项屏幕后,class 'androidx.preference.PreferenceScreen' 膨胀似乎有问题。为什么当我的首选项已在 res/xml
文件夹中声明并且必要的依赖项已添加到此项目时找不到?
我的应用的 minSdkVersion 是 24。
Error inflating class (not found)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>
Activity布局
<?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" />
Activity class
class MySettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings_container, MySettingsFragment())
.commit()
}
}
片段class
class MySettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.app_preferences)
}
}
如果您正在使用 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。
有了支持库 28.0.0
你应该有这样的 XML 代码:
(注意 对于这种情况删除 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'
和这样的实现:
(注意: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);
}
}
在 oficial documentation 中,示例代码中有 androidx,也许这就是问题所在,您不需要支持库
如果你想使用 PreferenceFragmentCompat
首先你需要在你的应用级别 gradle.
implementation 'androidx.preference:preference:1.0.0