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