Изменение основного макета фона основной активности из предпочтительной активности в Android

У меня есть активность предпочтений. Из этого упражнения я хочу изменить цвет фона одного из макетов основного упражнения.

Прямо сейчас, когда я пытаюсь запустить действие настройки с циклами "если", которые несут изменение в цвете фона, приложение вылетает.

Прослушиватель щелчков, который открывает действие настройки:

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

}

Экран настроек открывается нормально, если я закомментирую строки rl.setBackgroundColor в цикле if

1 ответ

Вы можете сделать это каждый раз, когда основное действие загружается, оно проверяет общие предпочтения и загружает цвет к тому, что когда-либо находится в предпочтениях. Если в настройках указано значение 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));
    }
}
Другие вопросы по тегам