我有一个包含多个 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.Fragment1
、fragments.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)?如果是,怎么办?
最佳答案
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/