【问题标题】:Android App Settings Menu, Can't get it to workAndroid 应用设置菜单,无法正常工作
【发布时间】:2023-04-07 10:24:01
【问题描述】:

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

什么有效

  • 活动菜单中的设置
  • 设置活动打开(偏好活动)
  • 显示“深色背景”的设置片段,带有复选框
  • 我可以单击和取消选中复选框并记住它

** 什么不起作用**

  • 我无法通过复选框来更改主活动中的值
  • 我无法在单击后立即更改值并根据值更新我的布局

基本上,我有一个带有一个选项的设置菜单。 “黑暗背景?”那是真的还是假的。我希望一旦将其设置为 true(选中),我的主要活动(和设置活动)的背景都会更改为不同的颜色(现在不管什么颜色)。

这是我的代码,请注意cmets...

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>

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

【问题讨论】:

    标签: java android checkbox


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 2017-11-11
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2016-02-10
      相关资源
      最近更新 更多