2014-07-13 24 views
6

谷歌android studio的標準設置活動現在顯示第一個標題「常規」。所以我修改了代碼,但在getPreferenceScreen()的第一次出現時,我得到了java.lang.NullPointerException。addPreference(fakeHeader);爲什麼我無法將第一個標題添加到getPreferenceScreen?

private void setupSimplePreferencesScreen() { 
    if (!isSimplePreferences(this)) { 
     return; 
    } 


    PreferenceCategory fakeHeader = new PreferenceCategory(this); 
    fakeHeader.setTitle(R.string.pref_header_notifications); 
    getPreferenceScreen().addPreference(fakeHeader); 
    addPreferencesFromResource(R.xml.pref_general); 



     fakeHeader = new PreferenceCategory(this); 
    fakeHeader.setTitle(R.string.pref_header_notifications); 
    getPreferenceScreen().addPreference(fakeHeader); 
    addPreferencesFromResource(R.xml.pref_notification); 

    bindPreferenceSummaryToValue(findPreference("username")); 
    bindPreferenceSummaryToValue(findPreference("password")); 
    bindPreferenceSummaryToValue(findPreference("server")); 

} 

    @Override 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public void onBuildHeaders(List<Header> target) { 
    if (!isSimplePreferences(this)) { 
     loadHeadersFromResource(R.xml.pref_headers, target); 
    } 
} 

<header 
    android:fragment="com.example.eslam.rottapharm.SettingsActivity$GeneralPreferenceFragment" 
    android:title="@string/pref_header_general" /> 
</preference-headers> 

回答

12

OK,我想它了,因爲它是討厭我的。因此,爲了顯示第一個首選項部分(例如general)的標題標題,我添加了另一個用作容器的xml文件(PreferenceScreen)。我把它叫做pref_container.xml,它位於XML目錄與其他偏好頭像pref_general.xml,pref_notification.xml等的代碼沿着它:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
</PreferenceScreen> 

然後,在SettingsActivity.java我有:

// Add container 
addPreferencesFromResource(R.xml.pref_container); 

// Add 'general' preferences, and a corresponding header. 
PreferenceCategory fakeHeader = new PreferenceCategory(this); 
fakeHeader.setTitle(R.string.pref_header_general); 
getPreferenceScreen().addPreference(fakeHeader); 
addPreferencesFromResource(R.xml.pref_general); 

// Add 'backup' preferences, and a corresponding header. 
fakeHeader = new PreferenceCategory(this); 
fakeHeader.setTitle(R.string.pref_header_backup); 
getPreferenceScreen().addPreference(fakeHeader); 
addPreferencesFromResource(R.xml.pref_backup); 

這對我來說是訣竅。

+0

是的,我做了這種修改嘗試獲取第一部分的標題標題,但徒勞無功,即使在原始代碼仍然沒有標題的常規部分中顯示,因爲您告訴我們。 –

+1

我已經更新了我的答案。這應該對你有所幫助。 – marius

+0

你能解釋一下這個解決方案嗎 –

相關問題