我有一个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>
SettingsActivity:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
如果启动了SettingsActivity
,这将显示一个带有fragments.Fragment1
、fragments.Fragment2
等的列表条目。
但是现在我想传递一个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 document must start with tag; foundPreferenceScreen at Binary XML file"。我已经没有更多的想法了,而且在SO和Google上的搜索也没有返回任何相关的结果。
所以我的问题是:是否可以直接从Activity的onCreate方法中加载PreferenceFragment(例如fragments.Fragment1)?如果可以,怎么做?
putExtra
将请求操作传递给该活动,但是Bundle savedInstanceState
始终为空。请帮忙。 - sam