如何调用从preferenceActivity特定preferenceFragment? [英] How do I call a specific PreferenceFragment from a PreferenceActivity?
问题描述
我有几个片段一preferenceActivity:
R.xml preferences:(简称为更好的可读性):
< XML版本=1.0编码=UTF-8&GT?;
< preference报头的xmlns:机器人=http://schemas.android.com/apk/res/android>
<头安卓碎片=fragments.Fragment1机器人:ID =@ + ID /片段1[...] />
<头安卓碎片=fragments.Fragment2机器人:ID =@ + ID / fragment2[...] />
[...]
< / preference报头>
SettingsActivity
公共类SettingsActivity扩展preferenceActivity {
@覆盖
公共无效onBuildHeaders(名单<头>目标){
loadHeadersFromResource(R.xml preferences,目标);
}
}
这将显示一个列表条目 fragments.Fragment1
, fragments.Fragment2
,...如果 SettingsActivity
已启动。
但现在我想通过一个包,这样在启动活动时,一个特定的preferenceFragment打开:
所以我说这为 SettingsActivity
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
如果(savedInstanceState = NULL和放大器;!&安培; savedInstanceState.getBoolean(快捷方式)){
//直接跳到fragments.Fragment1
}
}
我试图加载通过片段getFragmentManager()。findFragmentById(R.id.fragment1)
,但这个回报率空
。但是,即使我有正确的情况下,我不知道如何调用它。此外,调用 loadHeadersFromResource(R.xml preferences_fragment1,目标);
不工作 - 这将抛出一个RuntimeException的 XML文件必须以标签;发现preferenceScreen在二进制XML文件的。我没有留下意见,也对SO和谷歌搜索没有找到任何相关的结果。
所以我的问题是:是否有可能直接从Activitiy的onCreate方法加载一个preferenceFragment(如fragments.Fragment1)?如果是这样,怎么样?
据: <一href="http://developer.android.com/reference/android/$p$pference/$p$pferenceActivity.html#EXTRA_SHOW_FRAGMENT">http://developer.android.com/reference/android/$p$pference/$p$pferenceActivity.html#EXTRA_SHOW_FRAGMENT
公共静态最后弦乐EXTRA_SHOW_FRAGMENT
加在API级别11时启动该活动中,调用意向 可以包含这种额外的字符串来指定哪些片段要 初步显示出来。
常数值::机器人:show_fragment
意图=新的意图(这一点,SettingsActivity.class);
intent.putExtra(preferenceActivity.EXTRA_SHOW_FRAGMENT,Fragment1.class.getName());
intent.putExtra(preferenceActivity.EXTRA_NO_HEADERS,真正的);
I have a PreferenceActivity with several fragments:
R.xml.preferences: (shortened for better readability):
<?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);
}
}
This will show a list entry with fragments.Fragment1
, fragments.Fragment2
, ... if SettingsActivity
is started.
But now I want to pass a Bundle such that a specific PreferenceFragment is opened when starting the activity:
so I added this to SettingsActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
I tried to load the fragment via getFragmentManager().findFragmentById(R.id.fragment1)
, but this returns null
. But even if I had the correct instance, I would not know how to invoke it. Also, calling loadHeadersFromResource(R.xml.preferences_fragment1, target);
does not work - This will throw a RuntimeException "XML document must start with tag; foundPreferenceScreen at Binary XML file". I have no ideas left and also a search on SO and Google did not return any relevant results.
So my question is: Is it possible to directly load a PreferenceFragment (e.g. fragments.Fragment1) from the Activitiy's onCreate method? If so, how?
According to: 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 );
这篇关于如何调用从preferenceActivity特定preferenceFragment?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!