SharedPreferences子PreferenceScreen与自定义片段类

时间:2014-03-21 16:52:38

标签: android sharedpreferences

我有一个带有子PreferenceScreen的PreferenceScreen:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="SOUND">
        <PreferenceScreen android:title="Sound Options" 
            android:fragment="com.test.SoundPreferenceFragment">

        </PreferenceScreen>
    </PreferenceCategory>
...

子偏好是PreferenceFragment的自定义实现

public class SoundPreferencesFragment extends PreferenceFragment implements
        OnSharedPreferenceChangeListener {
...

我想知道我应该如何启动自定义片段。在我的主要活动中,我这样做:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, settingsPreference).commit();
}

这对于启动我的主设置首选项屏幕非常有用。

然后我覆盖:

    @Override
    public boolean onPreferenceStartFragment(PreferenceFragment fragment, Preference preference) {

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

       return true;
    }

这似乎有效,但我有几个问题。

  1. 这是正确的方法吗?
  2. 当我进入Sounds首选项并按下后退按钮时,它会将我带到设置中。它应该如何运作?
  3. 我想我也可以告诉子偏好开始新的意图,即创建一个新的SoundPreferencesActivity。这是一个更正确的&#39;方式。
  4. 编辑:

    我也试图不扩展onPreferenceStartFragment&#39;在我的主要活动中希望android能够正确地启动新的首选项&#39;它似乎确实启动了新的PreferenceFragment,但它将UI叠加在主要首选项UI的顶部。

1 个答案:

答案 0 :(得分:1)

您必须创建一个新活动并附加SoundPreferencesFragment。 当您在主设置活动中选择项目时,启动新活动