偏好片段未显示首选项

时间:2015-01-23 00:30:48

标签: java android

我试图让偏好屏幕加载,但似乎没有显示。我可以加载Activity,但我看不到实际的偏好。我在StackOverflow上尝试了其他解决方案,例如将setContentView(R.layout.activity_settings);添加到SettingsActivity,但没有成功。

SettingsActivity.java

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

public class SettingsActivity extends ActionBarActivity {

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

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
    }

}

的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:title="@string/pref_start"
        android:key="pref_key_storage_settings">
        <CheckBoxPreference
            android:key="pref_key_auto_exit"
            android:summary="@string/pref_summary_exit"
            android:title="@string/pref_title_exit"
            android:defaultValue="false"/>
    </PreferenceCategory>
</PreferenceScreen>

SettingsFragment.java

import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

public class SettingsFragment extends PreferenceFragment {

    public SettingsFragment() {
    }

    public void onCreate(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}

1 个答案:

答案 0 :(得分:0)

由于您的活动延伸ActionBarActivity,而FragmentActivity又扩展Fragment,因此只能使用支持PreferenceFragment及其后代。但是,Fragment来自原生PreferenceActivity。即使您的最低SDK高于11,这两个也无法互操作。

您有两种选择:

1)转到原生偏好

您的活动最好延长PreferenceFragment。然后,您可以继续使用当前的PreferenceFragment。缺点是您必须分别处理API 11+(或14+)和API 21+的样式(但可以完成)。 Full documentation on native preferences

2)EASY:全力支持

有一个社区制作了import android.preference.PreferenceFragment;的后端(实际上有多个,但我使用了这个),可以在这里找到:https://github.com/kolavar/android-support-v4-preferencefragment

您应该能够在将库导入项目并更改导入语句后立即编译,而不是import android.support.v4.preference.PreferenceFragment;而是PreferenceActivity

如何决定

如果您将API定位到11以下并且您需要操作栏,则除了选项2之外别无选择。如果您不需要{{1}}糖标题,主要详情视图,此选项也是最佳选择在大屏幕上等(再次参见文档)