我有偏好活动。通过此活动,我希望能够更改主要活动中其中一个布局的背景颜色。
现在,当我尝试使用带有背景颜色变化的“if”循环运行设置活动时,应用程序崩溃了。
用于打开设置活动的点击侦听器:
settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intentPreferences = new Intent(getApplicationContext(),
SettingsActivity.class);
startActivity(intentPreferences);
//startActivityForResult(intentPreferences);
}
});
偏好设置屏幕布局:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:key="pref_sync"
android:id="@+id/prefSwitch"
android:defaultValue="false"
android:title="You want a yellow or white background?"
/>
</PreferenceScreen>
我的偏好活动:
public class SettingsActivity extends PreferenceActivity {
private static final boolean ALWAYS_SIMPLE_PREFS = false;
private SwitchPreference settingsSwitch;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceManager mPreferenceManager = getPreferenceManager();
RelativeLayout rl = (RelativeLayout) findViewById(R.id.newdeliverylayout);
if (mPreferenceManager.getSharedPreferences().getBoolean("pref_sync", true)){
rl.setBackgroundColor(Color.YELLOW);
} else{
rl.setBackgroundColor(Color.WHITE);
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
}
}
如果我在if循环中注释掉rl.setBackgroundColor行,则首选项屏幕会正常打开
答案 0 :(得分:0)
您可以这样做,因此每次加载主活动时,它都会检查共享首选项并将颜色加载到首选项中的颜色。如果首选项为null,那么只需将其设置为默认颜色?
例如,你可以像这样设置颜色。 (我只是放了一个十六进制颜色参考,但你可以把它改成你想要的任何颜色。
public void setBackgroundColor() {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("color", "#FFFFFF");
editor.commit()
}
然后在主要活动中,确保每次加载/重新加载时都调用此方法
public void getBackgroundColor() {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
if (sharedPreferences.contains("color")) {
String myColor = sharedPreferences.getString("color", null);
mybackground.setBackgroundColor(Color.parseColor(myColor));
}
}