2014-03-02 50 views
1

我已經通過了至少六個教程,至少現在不能得到一個簡單的設置菜單爲我的應用程序工作。Android應用程序設置菜單,無法使其工作

什麼工作

  • 設置在活動菜單
  • 設置活動開啓(偏好活動)
  • 爲「暗背景」
  • 設置片段顯示出來,使用複選框
  • 我可以點擊取消選中該複選框並將其記住

**什麼不工作**

  • 我不能讓該複選框,在我的主要活動,儘快基礎上,改變值
  • 我不能有值的變化,因爲它被點擊和更新我的佈局值

基本上,我有一個選項的設置菜單。 「黑暗的背景?」這是真的還是假的。我希望一旦它被設置爲true(選中),我的主要活動(和設置活動)的背景都會變爲不同的顏色(目前無所謂顏色)。

這裏是我的代碼,也請注意評論...

SettingsActivity.java

... 
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{ 

    public static final String KEY_BACKGROUND_COLOR = "background_checkbox"; 
    private CheckBoxPreference mCheckBoxPreference; 
    public boolean mBgPref = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     SharedPreferences preferences = PreferenceManager 
       .getDefaultSharedPreferences(this); 
     mCheckBoxPreference = (CheckBoxPreference) getPreferenceScreen() 
       .findPreference(KEY_BACKGROUND_COLOR); 


     // Display the fragment as the main content. 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment()) 
       .commit(); 
    } 

    public static class SettingsFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      // Load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.pref_general); 
     } 

    } 

    // findPreference is deprecated... What should go here instead? 
    // persistBoolean gives me an error (persistBoolean(boolean) is undefined for the type SettingsActivity) 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     Preference mCheckBoxPref = findPreference(KEY_BACKGROUND_COLOR); 
     if (mCheckBoxPref.isEnabled()) { 
      persistBoolean(mBgPref); 
     } 
    } 
} 

MainActivity.java

... 

    // Preference change listener 
    private PreferenceChangeListener mPreferenceListener = null; 
    SharedPreferences prefs; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    ... 
     mBackground = (RelativeLayout) findViewById(R.id.background); 
    ... 
     // Manage prefs 
     prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     mPreferenceListener = new PreferenceChangeListener(); // Cannot instantiate the type PreferenceChangeListener 
     prefs.registerOnSharedPreferenceChangeListener(mPreferenceListener); //The method registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener) in the type SharedPreferences is not applicable for the arguments (PreferenceChangeListener) 
... 

* pref_general.xml

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

    <CheckBoxPreference 
     android:defaultValue="false" 
     android:key="background_checkbox" 
     android:summary="@string/backgroundColorSummary" 
     android:title="@string/backgroundColor" /> 


</PreferenceScreen> 

摘要:我找不到任何好的資源來幫助我做到這一點,而且似乎最近的偏好界面已經發生了很大變化,許多代碼已被棄用和更改。我如何才能使這個簡單的任務工作(選中複選框時更改我的背景顏色)?

回答

0

我最近發現同樣的事情,我做了一些研究,我認爲它也與此錯誤:

http://code.google.com/p/android/issues/detail?id=6052

我覺得什麼事是Android的版本之間,他們已經刪除了此方法:

現在,您可以這樣做:

listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 

    //Stuff here. 

     } 
    }; 


} 

@Override 
public void onResume() { 
    super.onResume(); 
    getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener); 

} 

@Override 
public void onPause() { 
    getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener); 
    super.onPause(); 
} 
相關問題