Изменить фоновое изображение линейного макета при запуске деятельности - PullRequest
1 голос
/ 16 марта 2012

Я изменяю фоновое изображение Linear Layout с помощью этого кода:

mainlayout.setBackgroundResource(R.drawable.back);

Но я хочу делать это каждый раз, когда начинается действие, при первом запуске и переключении между действиями. Я поместил этот код в оператор IF в onCreate (), но фон не изменился! Конечно, когда я установил этот код на кнопку, все работает отлично! Как и где я должен поставить свой код?

мой полный код:

            //check theme id
    if(myDbHelper.gettheme()==1)
    {
        mainlayout.setBackgroundResource(R.drawable.back);
    }else if(myDbHelper.gettheme()==2)
    {
        mainlayout.setBackgroundResource(R.drawable.blueback);
    }

Ответы [ 4 ]

3 голосов
/ 16 марта 2012

Вам нужно поместить свой код в метод onResume ().

Вот подробности, которые объяснят, почему http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

2 голосов
/ 16 марта 2012

Возможно, вы захотите сослаться на жизненный цикл активности Android , но я бы порекомендовал метод onResume().

1 голос
/ 16 марта 2012

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

android:background="@drawable/back"

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

Хотя в том случае, если вы хотели разные темы, как я только что видел в исходном сообщении (казалось, что оно было отредактировано с тех пор, как я его набирал), вы можете попытаться сохранить константу int R.drawable, которую хочет пользователь, в качестве background или theme, и пусть getTheme () вашего DB Helper возвращает эту ссылку, чтобы установить фон без операторов if.

Такое высказывание, что пользователь меняет свои предпочтения на R.drawable.black или .blueback, сохраняя int внутри БД, чтобы он получал возврат посредством gettheme, а не с перечислением 1 или 2. Не уверен, что это будет наилучшей практикой.

1 голос
/ 16 марта 2012

РЕДАКТИРОВАТЬ: Вы уверены, что тема 1 или 2?

Если вы хотите делать это каждый раз, почему бы вам просто не определить его как фон mainLayout в вашем layout.xml? В противном случае используйте onResume (), а не onCreate ().

...