android - 如何从 PreferenceActivity 调用特定的 PreferenceFragment?

标签 android android-fragments android-preferences

我有一个包含多个 fragment 的 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>

设置 Activity :

public class SettingsActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.preferences, target);
    }
}

如果 SettingsActivity 启动,这将显示包含 fragments.Fragment1fragments.Fragment2 的列表条目。

但现在我想传递一个 Bundle,以便在启动 Activity 时打开一个特定的 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) 加载 fragment ,但这返回了 null。但即使我有正确的实例,我也不知道如何调用它。此外,调用 loadHeadersFromResource(R.xml.preferences_fragment1, target); 不起作用 - 这将抛出 RuntimeException“XML 文档必须以标记开头;在二进制 XML 文件中找到 PreferenceScreen ”。我没有任何想法,而且在 SO 和 Google 上搜索也没有返回任何相关结果。

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

最佳答案

根据: http://developer.android.com/reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT

public static final String EXTRA_SHOW_FRAGMENT

Added in API level 11 When starting this activity, the invoking Intent can contain this extra string to specify which fragment should be initially displayed.

Constant Value: ":android:show_fragment"

intent = new Intent( this, SettingsActivity.class );
intent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT, Fragment1.class.getName() );
intent.putExtra( PreferenceActivity.EXTRA_NO_HEADERS, true );

关于android - 如何从 PreferenceActivity 调用特定的 PreferenceFragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672487/

相关文章:

java - Android 9 上相机 "1"的 Sinch VideoCaptureThread 问题

android - 在保留异步任务 fragment 的屏幕旋转后, fragment 的目标不在 fragment 管理器中

android - fragment Activity 中的 onclick 事件不起作用

android - HoloEverywhere + ListPreference = 崩溃

php - uniqid(”, true) 的主要功能是什么?

java - 如何将数据从 DialogFragment 发送到 Fragment?

android - 如何从 Fragment 返回到 Fragment?

android - EditTextPreference 单行

android - Material Design 中介绍的原生 SeekbarPreference

android - 如何在第二个 Activity 中没有任何操作时返回到主要 Activity