我现在至少已经阅读了六个教程,但无法获得适用于我的应用程序的简单设置菜单。
什么有效
- 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/