【发布时间】:2014-03-21 16:52:38
【问题描述】:
我有一个带有子 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;
}
这似乎可行,但我有几个问题。
- 这是正确的方法吗?
- 当我进入“声音”首选项并点击返回按钮时,它会完全退出设置。它应该是这样工作的吗?
- 我想我也可以告诉子偏好开始一个新的意图,即创建一个新的 SoundPreferencesActivity。这是一种更“正确”的方式吗?
编辑:
我还尝试不在我的主要活动中扩展“onPreferenceStartFragment”,希望 android 能够正确启动新的首选项“它似乎确实启动了新的 PreferenceFragment,但它覆盖了主首选项 UI 之上的 UI .
【问题讨论】: