java - Android 应用程序设置菜单,无法使其工作

标签 java android checkbox

我现在至少已经阅读了六个教程,但无法获得适用于我的应用程序的简单设置菜单。

什么有效

  • Activity 菜单中的设置
  • 设置 Activity 打开(偏好 Activity )
  • 显示“深色背景”的设置 fragment ,并带有复选框
  • 我可以单击和取消单击该复选框,它就会被记住

** 什么不起作用**

  • 我无法获取用于更改主要 Activity 中的值的复选框
  • 我无法在单击后立即更改值并根据该值更新我的布局

基本上,我有一个带有一个选项的设置菜单。 “深色背景?”这要么是真的,要么是假的。我希望一旦将其设置为 true(选中),我的主要 Activity (和设置 Activity )的背景都会更改为不同的颜色(现在什么颜色都没关系)。

这是我的代码,请同时注意注释...

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>

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

最佳答案

我最近发现了同样的事情,我做了一些研究,我认为它与这个错误有关:

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();
}

关于java - Android 应用程序设置菜单,无法使其工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22135053/

相关文章:

java - for 循环内 if 语句中的复选框以相反的方式工作

java - Java 中使用多线程的并发问题

java - spring boot 从不同的 maven 模块读取属性文件

java - 如何在不指定类路径的情况下启动java应用程序?

java - Realm 没有为反射对象的字段设置值(Android)

android - 基于资源值(value)的 Activity 导向

ios - checkbox的最佳使用方式——IOS swift

javascript - 以样式格式选择所有或部分父/子复选框

java - 如何使用另一个类中的方法从一个 java 类中的 MD 数组中删除重复项

android - 忽略 EXTRA_OUTPUT 困境的视频捕获