2013-05-02 100 views
1

我使用this庫創建我的PreferenceActivity。它迄今爲止工作得很好,但我無法在我的偏好設置上設置任何聽衆。無法使用統一首選項保留我的首選項

那我Activity看起來像:

public class PrefActivity extends UnifiedSherlockPreferenceActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setHeaderRes(R.xml.preference_headers); 
     // Set desired preference file and mode (optional) 
     setSharedPreferencesMode(Context.MODE_PRIVATE); 

     super.onCreate(savedInstanceState); 

     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     Preference p = (Preference)findPreference("deleteSavedSearches"); 
     p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
         @Override 
         public boolean onPreferenceClick(Preference arg0) { 
          //code for what you want it to do 
          return true; 
         } 
        }); 
    } 
} 

這是我PreferenceScreen:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <Preference 
     android:key="deleteSavedSearches" 
     android:summary="Gespeicherte Suchen löschen" 
     android:title="Gespeicherte Suchen löschen" /> 

</PreferenceScreen> 

而這些都是我的頭:

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:unified="http://schemas.android.com/apk/res-auto" > 

    <!-- 
    /* 
    ** Header definitions are identical to android:* except for preferenceRes which should be a reference to a preference xml file 
    ** Unlike the native headers these are also used for building the single pane version. 
    */ 
    --> 
    <header 
     unified:fragment="com.example.skelett.PrefActivity$GeneralPreferenceFragment" 
     unified:preferenceRes="@xml/pref_country" 
     unified:title="Land" /> 
    <header 
     unified:fragment="com.example.skelett.PrefActivity$GeneralPreferenceFragment" 
     unified:preferenceRes="@xml/pref_data" 
     unified:title="Daten" /> 

</preference-headers> 

在這種情況下,pnullgetPreferenceScreen()也總是會返回null。我在首選項xml中設置了我的密鑰。我錯過了什麼?

+0

其中u被設置SharedPreferences名'deleteSavedSearches'? – 2013-05-02 13:16:00

+0

已編輯,因爲您可以看到已設置密鑰。 – FWeigl 2013-05-02 13:18:19

回答

0

只需推動findPreference方法onPostCreate並應工作:

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    Preference p = (Preference) findPreference("deleteSavedSearches"); 
    p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference arg0) { 
      // code for what you want it to do 
      return true; 
     } 
    }); 
}