Пустая PreferenceActivity, хотя PreferenceFragment был добавлен

Я столкнулся с довольно простой проблемой: я пытаюсь создать экран предпочтений в своем приложении, и я хотел бы сделать это с помощью нового, теперь уже стандартного метода PreferenceFragment.

Это мои настройки xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="@string/prefs_interface_settings">

    <SwitchPreference
        android:key="show_average"
        android:title="Show average length of work day"
        android:defaultValue="false"
        android:summary="Display the calculated average in the app title" />

    <EditTextPreference
        android:key="edittext_preference"
        android:title="@string/workday_duration_prefs_title"
        android:summary="summary_edittext_preference"
        android:defaultValue="8"
        android:dialogTitle="dialog_title_edittext_preference" />

    </PreferenceCategory>
</PreferenceScreen>

Это моя активность в настройках

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.widget.Toast;


public class SettingsActivity extends PreferenceActivity {

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

        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }
}

и, наконец, это мой SettingsFragment:

import android.os.Bundle;
import android.preference.PreferenceFragment;


public class SettingsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            addPreferencesFromResource(R.xml.app_preferences); //Gets settings from XML
        }
    }

}

Когда я запускаю приложение, если я открываю указанное действие, я получаю пустое, точно так же, как фрагмент не был инициализирован или не показан по какой-то причине. Но код такой простой... Я просто не могу понять, что я делаю не так!

Спасибо всем за вашу помощь


person Marco Zanetti    schedule 23.03.2015    source источник
comment
удалить оператор if (getArguments() != null).   -  person Anggrayudi H    schedule 23.03.2015
comment
Ты прав. Мне стыдно! О_о Если хочешь можешь написать как ответ и я проверю как правильный.   -  person Marco Zanetti    schedule 23.03.2015


Ответы (1)


getArguments() используется только при создании <preference-headers/>. Аргументы, объявленные в элементе <extra/> XML-файла заголовка предпочтений. После того, как вы его объявили, вы вызовете этот код внутри PreferenceFragment:

String settings = getArguments().getString("settings");
if (settings.equals("myArgument")) {
    addPreferencesFromResource(R.xml.settings_wifi);
}

Но, поскольку вы не используете <preference-headers/>, вам нужно только вызвать этот код в PreferenceFragment:

addPreferencesFromResource(R.xml.app_preferences);
person Anggrayudi H    schedule 23.03.2015