android студия сохраняет последнее выбранное фоновое изображение - PullRequest
2 голосов
/ 18 июня 2020

Я создал простой код для изменения фона изображения при нажатии кнопки, но проблема в том, что после изменения фонового изображения и закрытия приложения и его повторного открытия фоновое изображение возвращается к исходному, и я хочу сохранить измененные фон изображения и отображать его для следующего запуска моего приложения.

вот мой код:

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            int bg = 0;
            if (x[0] == 5) x[0] = 1;
            if (x[0] == 1) bg = R.drawable.bg1;
            if (x[0] == 2) bg = R.drawable.bg2;
            if (x[0] == 3) bg = R.drawable.bg3;
            if (x[0] == 4) bg = R.drawable.bg4;
            if (x[0] == 5) bg = R.drawable.bg5;

            layout.setBackgroundResource(bg);
            x[0]++;
        }


});

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Вы можете использовать SharedPreference для сохранения и хранения идентификатора файла изображения ... при запуске приложения получите это значение int из общего предпочтения в onCreate () действия и установите его при каждом изменении

SharedPreferences mPreferences
int currentBackground;

onCreate() {

    mPreferences = getSharedPreferences("MySahredPrefs", MODE_PRIVATE);

    int currentBackground = sharedPrefs.getInt("MyBackground", R.drawable.bg1); // <<< getting the background from the shared preference

    layout.setBackgroundResource(currentBackground);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int bg = 0;
            if (x[0] == 5) x[0] = 1;
            if (x[0] == 1) bg = R.drawable.bg1;
            if (x[0] == 2) bg = R.drawable.bg2;
            if (x[0] == 3) bg = R.drawable.bg3;
            if (x[0] == 4) bg = R.drawable.bg4;
            if (x[0] == 5) bg = R.drawable.bg5;

            layout.setBackgroundResource(bg);

            SharedPreferences.Editor preferencesEditor = mPreferences.edit();
            preferencesEditor.putInt("MyBackground", bg); // <<<<<<<< setting the background to the shared preference
            preferencesEditor.apply();

            x[0]++;
        }
    });
}
0 голосов
/ 18 июня 2020

Насколько я понимаю, вы сможете сделать это довольно просто, используя общие настройки.

Затем при запуске получить int и перевернуть фон

  SharedPreferences preferences;
  SharedPreferences.Editor editor;
        @Override
        protected void onCreate(bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myactivity);

        preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        editor = preferences.edit();

        //I used a separate method to keep clutter out of onCreate but its up to you, doesn't matter. 
        setBackground();
        button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    setBackground();
                }

        });
    }
    //Here we just grab the id, and assign the background. 
        public void setBackground(){
             int id = preferences.getInt("backgroundid",1);
             int bg = 0;
             if (id == 1) bg = R.drawable.bg1;
             if (id == 2) bg = R.drawable.bg2;
             if (id == 3) bg = R.drawable.bg3;
             if (id == 4) bg = R.drawable.bg4;
             if (id == 5) bg = R.drawable.bg5;

             layout.setBackgroundResource(bg);
             editor.putInt("backgroundid",id++);
             editor.commit();


    }
0 голосов
/ 18 июня 2020

Я рекомендую вам создать файл xml или json для хранения массива изображений You и при изменении переупорядочить этот список, в приведенном ниже примере показан список автомобилей, и каждый раз, когда я меняю порядок списка в основном автомобиль это первый в списке

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="list_sorted_data">[3,1,2]</string>
</map>

Рабочий пример Вы видите в действии https://www.youtube.com/watch?v=l7H0YbBvVQ4&t=16s если вы не хотите видеть все go до 2 мин и 40 сек c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...