2014-03-02 48 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(); 
} 
相关问题