2

私は自分のアプリケーションの設定アクティビティに取り組んでいます。設定用に 2 つのヘッダーを設定し、各ヘッダーのフラグメントを作成しました。問題は、ヘッダーをクリックしても何も表示されないことです。ご協力ありがとうございました。

これが私の好みのアクティビティです

public class Preferences extends PreferenceActivity {

    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.prefheads, target);

    }
}

ここに最初のフラグメントがあります

public class Prefs1 extends PreferenceFragment {

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.fragment_prefs1);
        }

    }


}

2番目のフラグメントは次のとおりです。

public class Prefs2 extends PreferenceFragment {


    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.fragment_prefs2);
        }

    }

}

XML ファイル: ヘッダー

<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <header
        android:fragment="com.example.lubys.prefs.prefs1"
        android:title="First category"
        android:summary="This doesnt need summary" />
    <header
        android:fragment="com.example.lubys.prefs.prefs2"
        android:title="Second cat"
        android:summary="This is awful summary">
        </header>
</preference-headers>

フラグメント 1:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.lubys.prefs.prefs1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <PreferenceCategory
        android:title="the title"
        android:key="key2">
    <EditTextPreference android:title="Your Name"
        android:key="username"
        android:summary="Please provide your username"></EditTextPreference>
    <CheckBoxPreference android:title="Application Updates"
        android:defaultValue="false"
        android:summary="This option if selected will allow the application to check for latest versions."
        android:key="applicationUpdates" />

        <ListPreference
            android:title="Download Details"
            android:summary="Select the kind of data that you would like to download"
            android:key="downloadType"
            android:defaultValue="1"
            android:entries="@array/c"
            android:entryValues="@array/c" />

</PreferenceCategory>

</PreferenceScreen>

フラグメント 2:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.lubys.prefs.prefs1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <PreferenceCategory
        android:title="sms"
        android:key="pref_key_storage_settings">
        <CheckBoxPreference
            android:key="saas"
            android:summary="asde"
            android:title="Something"
            android:defaultValue="false"/>
    </PreferenceCategory>
</PreferenceScreen>
4

1 に答える 1

2

あなたが得ていないかどうかを確認してください:

java.lang.RuntimeException:

Fragment クラスが有効であることを確認するには 、PreferenceActivity のサブクラスで isValidFragment(String) をオーバーライドする必要があります。XXXは、フラグメントYYYが有効かどうかを確認していません。

isValidFragment Android API 19

Android の isValidFragment() が PreferenceActivity から呼び出されるのはいつですか?

http://securityintelligence.com/new-vulnerability-android-framework-fragment-injection#.VRGSv1V_NBc

于 2015-03-24T16:41:22.027 に答える