2012-12-02 87 views
9

我有幾個片段一PreferenceActivity:如何從PreferenceActivity調用特定的PreferenceFragment?

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.Fragment1fragments.Fragment2,...如果SettingsActivity開始的列表條目。

但現在我想通過一個包,從而開始活動時特定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文檔必須以標記開頭; foundPreferenceScreen在二進制XML文件」。我沒有任何想法,並且對SO和Google進行搜索並沒有返回任何相關結果。

所以我的問題是:是否有可能從Activitiy的onCreate方法直接加載PreferenceFragment(例如fragments.Fragment1)?如果是這樣,怎麼樣?

回答

30

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

公共靜態最後絃樂EXTRA_SHOW_FRAGMENT

API等級11

添加時啓動此活動中,調用意圖 可以包含這些額外的字符串來指定哪些片段要 最初顯示。

常數值: 「:機器人:show_fragment」

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

正是我一直在尋找對於。謝謝! –

+0

真的很酷,他們支持這一點。感謝分享。它也適用於我。 – lepert

0

只需使用下面的代碼在你的PreferenceActivityPreferenceFragment的onCreate

addPreferencesFromResource(R.xml.**YOUR PREFERENCE FRAGMENT XML**); 
相關問題