在main

时间:2015-05-14 19:40:26

标签: java android android-preferences preferenceactivity

我有偏好活动。通过此活动,我希望能够更改主要活动中其中一个布局的背景颜色。

现在,当我尝试使用带有背景颜色变化的“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行,则首选项屏幕会正常打开

1 个答案:

答案 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));
    }
}