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

时间:2016-01-06 22:07:10

标签: android android-fragments preferences

我的偏好活动有问题。 我已经创建了偏好屏幕和一个偏好活动。 在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 ...... 如何在一项活动中同时使用它们?

感谢您的帮助

//编辑:找到一个解决方案,但也许它过于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);
        }
    }

这可以吗?或者这样做是危险的吗?

1 个答案:

答案 0 :(得分:24)

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

中枚举所有偏好片段

MySettingsActivity.class

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

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>

的preferences.xml

var material;

material = [
  {
    name: 'item 1'
  }, {
    name: 'item 2'
  }, {
    name: 'item 3'
  }, {
    name: 'item 4'
  }, {
    name: 'item 5'
  }, {
    name: 'item 6'
  }
];

$('.random').click(function() {
  var index;
  this.materials = $('.materials');
  index = Math.floor(Math.random() * material.length);
  this.materials.text(material[index].name);
});