0

私は簡単な設定活動に取り組んでいます。設定ヘッダー、PreferenceFragment、複数の設定画面ファイル、および PreferenceActivity を使用しています。Androidシステムの設定のように見え、機能するようにしたい。タブレットではすべて正常に動作します。設定アクティビティは、2 つのフラグメントを表示します。1 つはヘッダーで、もう 1 つは設定画面です。電話でアプリを開くと、ヘッダー付きのフラグメントが 1 つだけ表示されます。これはまさに私が望むものですが、何かをクリックするとアプリがクラッシュします。つまり、電話で何かをクリックすると、フラグメントが設定画面に置き換えられます。ご協力ありがとうございました。

これが私のコードです:

headers.xml

<preference-headers
    xmlns:android="http://schemas.android.com/apk/res/android">

    <header
        android:fragment="settingsApps.com.bendit.ILY.mysetts.PrefsF"
        android:title="@string/settings_update"
        android:summary="@string/settings_updateSummary" >
    </header>
    <header
        android:fragment="settingsApps.com.bendit.ILY.mysetts.PrefsF"
        android:title="@string/settings_display"
        android:summary="@string/settings_displaySummary">
    </header>
    <header
        android:fragment="settingsApps.com.bendit.ILY.mysetts.PrefsF"
        android:title="@string/settings_notify">
    </header>

</preference-headers>

PreferenceActivity(Prefs.java)

public class Prefs extends PreferenceActivity {
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.headers, target);
    }
}

PreferenceFragment(PrefsF.java)

public class PrefsF extends PreferenceFragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {

        int preferenceFile_toLoad=-1;
        String settings = getArguments().getString("settings");
        if (Constants.SETTING_UPDATE.equals(settings)) {
            // Load the preferences from an XML resource
            preferenceFile_toLoad= R.xml.preference_update;
        }else if (Constants.SETTING_DISPLAY.equals(settings)) {
            // Load the preferences from an XML resource
            preferenceFile_toLoad=R.xml.preference_display;
        }else if (Constants.SETTING_NOTIFY.equals(settings)) {
            // Load the preferences from an XML resource
            preferenceFile_toLoad=R.xml.preference_notify;
        }

        addPreferencesFromResource(preferenceFile_toLoad);
    }
}
4

1 に答える 1

0

Preference アクティビティが設定ヘッダー タイプに対して正しく設定されていないため、このエラーが発生します。アクティビティの正しい方法は次のとおりです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onBuildHeaders(List<Header> target) {
    loadHeadersFromResource(R.xml.preference_headers, target);
    setContentView(R.layout.preference);
}

@Override
protected boolean isValidFragment(String fragmentName) {
    return (Prefs1.class.getName().equals(fragmentName)
            || Prefs2.class.getName().equals(fragmentName)
            || Prefs3.class.getName().equals(fragmentName));
}

ここで Prefs"number" は、PrefsF のような設定のヘッダーです。

于 2015-08-18T11:11:50.053 に答える