Mic*_*Osl 12 android android-preferences android-fragments
我有一个带有几个片段的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>
Run Code Online (Sandbox Code Playgroud)
设置活动:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
Run Code Online (Sandbox Code Playgroud)
这将显示一个列表条目fragments.Fragment1,fragments.Fragment2,...如果SettingsActivity被启动.
但是现在我想传递一个Bundle,以便在启动活动时打开一个特定的PreferenceFragment:
所以我把它添加到了SettingsActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过加载片段getFragmentManager().findFragmentById(R.id.fragment1),但这会返回null.但即使我有正确的实例,我也不知道如何调用它.此外,调用loadHeadersFromResource(R.xml.preferences_fragment1, target);不起作用 - 这将抛出一个RuntimeException" XML文档必须以标记开始;在二进制XML文件中找到的PrePreferenceScreen ".我没有任何想法,搜索SO和谷歌也没有返回任何相关结果.
所以我的问题是:是否可以从Activitiy的onCreate方法直接加载PreferenceFragment(例如fragments.Fragment1)?如果是这样,怎么样?
Waz*_*_Be 34
根据:http: //developer.android.com/reference/android/preference/PreferenceActivity.html#EXTRA_SHOW_FRAGMENT
public static final String EXTRA_SHOW_FRAGMENT
在API级别11中添加在启动此活动时,调用Intent可以包含此额外字符串以指定最初应显示哪个片段.
常量值:":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 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12317 次 |
| 最近记录: |