我如何从PreferenceActivity调用特定的PreferenceFragment?

问题描述 投票:11回答:3

我有一个带有多个片段的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);
    }
}

如果启动fragments.Fragment1,将显示带有fragments.Fragment2SettingsActivity,...的列表条目。

但是现在我想传递一个包,以便在启动活动时打开特定的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文件中的foundPreferenceScreen”。我没有任何想法,对SO和Google的搜索也没有返回任何相关结果。

所以我的问题是:是否可以从Activitiy的onCreate方法中直接加载PreferenceFragment(例如fragments.Fragment1)?如果是这样,如何?

android android-fragments android-preferences
3个回答

1
投票
只需在您的

PreferenceActivity


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.