Android应用设置菜单,无法让它工作

时间:2014-03-02 23:20:29

标签: java android checkbox

我至少现在已经完成了六个教程,无法获得一个简单的设置菜单来为我的应用程序工作。

什么有用

  • 活动菜单中的设置
  • 设置活动打开(首选项活动)
  • 显示“暗背景”的设置片段,带复选框
  • 我可以点击并取消选中该复选框并记住

**什么行不通**

  • 我无法通过复选框更改主要活动中的值
  • 点击后我无法更改值,并根据值
  • 更新布局

基本上,我有一个带有一个选项的设置菜单。 “黑暗的背景?”这是真是假。我希望一旦设置为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>

摘要:我找不到任何好的资源来帮助我这样做,而且似乎最近的偏好界面已经发生了很大变化,很多代码已被弃用和更改。如何才能使这个简单的任务工作(选中复选框时更改背景颜色)?

1 个答案:

答案 0 :(得分: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();
}