Приложение вылетает, когда я нажимаю на заголовок предпочтений на телефоне

Я работаю над простыми настройками. Я использую заголовки предпочтений, PreferenceFragment, несколько файлов экранов предпочтений и PreferenceActivity. Я хочу, чтобы он выглядел и работал как настройки системы Android. На планшете все работает. Активность настроек отображает два фрагмента, один с заголовками и один с экраном предпочтений. Когда я открываю приложение на телефоне, оно отображает только один фрагмент с заголовками, это именно то, что я хочу, но когда я на что-то нажимаю, приложение вылетает. Я хочу, чтобы он работал точно так же, как настройки системы Android, а это означает, что когда я нажимаю что-то на телефоне, он заменяет фрагмент экраном предпочтений. Спасибо за помощь.

Вот мой код:

заголовки.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);
    }
}

Фрагмент предпочтения (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);
    }
}

person Daniel Bystrican    schedule 15.03.2015    source источник
comment
можешь выложить логкэт?   -  person maysi    schedule 15.03.2015


Ответы (1)


Вы получаете эту ошибку, потому что ваша Preference Activity неправильно настроена для типа заголовков предпочтений, правильный способ для Activity таков:

@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 — это заголовки настроек, таких как ваш PrefsF.

person Bahadir Tasdemir    schedule 18.08.2015