我至少现在已经完成了六个教程,无法获得一个简单的设置菜单来为我的应用程序工作。
什么有用
**什么行不通**
基本上,我有一个带有一个选项的设置菜单。 “黑暗的背景?”这是真是假。我希望一旦设置为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>
摘要:我找不到任何好的资源来帮助我这样做,而且似乎最近的偏好界面已经发生了很大变化,很多代码已被弃用和更改。如何才能使这个简单的任务工作(选中复选框时更改背景颜色)?
答案 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();
}