Android 首选项 activity IllegalArgumentException:此 activity 的片段无效
Android preference activity IllegalArgumentException: Invalid fragment for this activity
我的偏好有问题 activity。
我已经创建了首选项屏幕和一个首选项 activity。
在我的 phone 和 Android 4.2.2 上它工作正常。
但是在使用 Android 5.0 的 Android 模拟器上,它会崩溃并出现以下错误:IllegalArgumentException: Invalid fragment for this activity.
是因为这段代码吗?:
@Override
protected boolean isValidFragment(String fragmentName) {
return MyPreferenceFragment.class.getName().equals(fragmentName);
}
第二个偏好片段是 MyExportPreferenceFragment...
如何将它们与一个 activity 一起使用?
感谢您的帮助
//编辑:找到了一个解决方案,但也许它太 hacky^^
@Override
protected boolean isValidFragment(String fragmentName) {
if(MyPreferenceFragment.class.getName().equals(fragmentName)) {
return MyPreferenceFragment.class.getName().equals(fragmentName);
}
else {
return MyExportPreferenceFragment.class.getName().equals(fragmentName);
}
}
这样可以吗?还是这样做很危险?
枚举所有isValidFragment
中的偏好片段
MySettingsActivity.class
@Override
protected boolean isValidFragment(String fragmentName) {
return Fragment1.class.getName().equals(fragmentName) ||
Fragment2.class.getName().equals(fragmentName) ||
Fragment3.class.getName().equals(fragmentName) ||
Fragment4.class.getName().equals(fragmentName) ||
Fragment5.class.getName().equals(fragmentName);
}
Headers.xml
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:title="@string/one"
android:summary="@string/one_sum"
android:fragment="com.***.fragment1" />
</preference-headers>
Preferences.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/category_basic">
<PreferenceScreen
android:icon="@drawable/ic_three"
android:fragment="com.***.fragment3"
android:title="@string/text"
android:summary="@string/text_sum"
android:key="@string/key" />
</PreferenceCategory>
</PreferenceScreen>
我的偏好有问题 activity。
我已经创建了首选项屏幕和一个首选项 activity。
在我的 phone 和 Android 4.2.2 上它工作正常。
但是在使用 Android 5.0 的 Android 模拟器上,它会崩溃并出现以下错误:IllegalArgumentException: Invalid fragment for this activity.
是因为这段代码吗?:
@Override
protected boolean isValidFragment(String fragmentName) {
return MyPreferenceFragment.class.getName().equals(fragmentName);
}
第二个偏好片段是 MyExportPreferenceFragment... 如何将它们与一个 activity 一起使用?
感谢您的帮助
//编辑:找到了一个解决方案,但也许它太 hacky^^
@Override
protected boolean isValidFragment(String fragmentName) {
if(MyPreferenceFragment.class.getName().equals(fragmentName)) {
return MyPreferenceFragment.class.getName().equals(fragmentName);
}
else {
return MyExportPreferenceFragment.class.getName().equals(fragmentName);
}
}
这样可以吗?还是这样做很危险?
枚举所有isValidFragment
MySettingsActivity.class
@Override
protected boolean isValidFragment(String fragmentName) {
return Fragment1.class.getName().equals(fragmentName) ||
Fragment2.class.getName().equals(fragmentName) ||
Fragment3.class.getName().equals(fragmentName) ||
Fragment4.class.getName().equals(fragmentName) ||
Fragment5.class.getName().equals(fragmentName);
}
Headers.xml
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:title="@string/one"
android:summary="@string/one_sum"
android:fragment="com.***.fragment1" />
</preference-headers>
Preferences.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/category_basic">
<PreferenceScreen
android:icon="@drawable/ic_three"
android:fragment="com.***.fragment3"
android:title="@string/text"
android:summary="@string/text_sum"
android:key="@string/key" />
</PreferenceCategory>
</PreferenceScreen>