代码之家  ›  专栏  ›  技术社区  ›  Peter234

Android首选项活动IllegalArgumentException:此活动的片段无效

  •  8
  • Peter234  · 技术社区  · 9 年前

    我的偏好活动有问题。 我创建了偏好屏幕和一个偏好活动。 在我的Android 4.2.2手机上,它运行良好。 但在Android 5.0的Android Emulator上,它会崩溃并出现以下错误: IllegalArgumentException: Invalid fragment for this activity. 这是因为这个代码吗?:

     @Override
        protected boolean isValidFragment(String fragmentName) {
            return MyPreferenceFragment.class.getName().equals(fragmentName);
        }
    

    第二个首选项片段将是MyExportPreferenceFragment。。。 我如何在一个活动中同时使用这两种方法?

    谢谢你的帮助

    //编辑:找到了一个解决方案,但可能它太破解了^^

    @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);
            }
        }
    

    这还好吗?还是这样做很危险?

    1 回复  |  直到 9 年前
        1
  •  25
  •   Nikita G.    9 年前

    列举 全部的 中的偏好片段 isValidFragment

    我的设置活动.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);
        }
    

    标题.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>
    

    首选项.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>