我有一个带有几个片段的 PreferenceActivity:
R.xml.preferences:(为了更好的可读性而缩短):
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="fragments.Fragment1" android:id="@+id/fragment1" [...] />
<header android:fragment="fragments.Fragment2" android:id="@+id/fragment2" [...] />
[...]
</preference-headers>
设置活动:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
这将显示一个带有fragments.Fragment1
, fragments.Fragment2
, ... 如果SettingsActivity
已启动的列表条目。
但是现在我想传递一个 Bundle 以便在启动活动时打开一个特定的 PreferenceFragment :
所以我将此添加到SettingsActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
我试图通过加载片段getFragmentManager().findFragmentById(R.id.fragment1)
,但这会返回null
。但即使我有正确的实例,我也不知道如何调用它。此外,调用loadHeadersFromResource(R.xml.preferences_fragment1, target);
不起作用 - 这将引发 RuntimeException“ XML 文档必须以标记开头;在二进制 XML 文件中找到PreferenceScreen ”。我没有任何想法,并且在 SO 和 Google 上的搜索也没有返回任何相关结果。
所以我的问题是:是否可以从 Activitiy 的 onCreate 方法中直接加载 PreferenceFragment(例如 Fragment.Fragment1)?如果是这样,怎么做?