2014-12-07 3 views
2

Пример: У меня есть 3 вида деятельности: activity1, activity2 и activity3. Activity1 содержит кнопку, в которой он может изменить фон activity2 и activity3 при нажатии. Это возможно? Если да, то как? У меня есть идея об использовании метода:Изменение фона активности из другого вида деятельности

//example for activity1 

public void onClick(View v) { 
View background = findViewById(R.id.activity1relativeLayout); 
background.setBackgroundResource(R.drawable.customBackground); 

}

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

+0

Как вы собираетесь иметь 3 'Activities' отображается в то же время? ([ 'ActivityGroup'] (https://developer.android.com/reference/android/app/ActivityGroup.html) устарела сейчас). Вы должны использовать 'Fragments' – Emmanuel

+0

@ Emmanuel. Вы неправильно поняли, что я имею в виду, что действия будут отображаться по одному за раз, но когда вы вносите изменения в текущую деятельность (например, меняя фон активности 1), тогда будет также изменен и другой фон из 2 видов деятельности. Поэтому, например, я нажимаю кнопку в действии 1, тогда ее фон будет изменен, и когда я перейду к другим действиям, их фон также должен был быть изменен. –

ответ

1

Вы можете сохранить цвет в SharedPreferences при нажатии на кнопку. Затем в цветообразующей активности onStart прочитайте предпочтение и измените цвет фона.

Button.onClick (...)

SharedPreferences sharedPref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putInt("background_resource", selected_background); 
editor.apply(); 

Activity.onStart (...)

SharedPreferences sharedPref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE); 
int bg = sharedPref.getInt("background_resource", android.R.color.white); // the second parameter will be fallback if the preference is not found 
getWindow().setBackgroundDrawableResource(bg); 
+0

Сэр Я не буду использовать простой цвета для фона, а скорее изображения. Если это возможно, можете ли вы написать образец кода для этого? Заранее спасибо. –

+0

@JethroMonzada Сделано. Как получить идентификатор ресурса зависит от вас. –

+0

Хорошо, спасибо за ответ. –

0

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

Надеюсь, что это поможет, дайте мне знать, если вам нужна логика кода.

+1

Это действительно плохая идея. Если вы это сделаете, вы пропустите «Деятельности». – Emmanuel

+0

Не могли бы вы подробнее рассказать об этом, почему вы думаете, что может произойти утечка. – Shiv

+0

Поскольку статика живет дольше, чем «Активность». См. [Здесь] (http://www.curious-creature.com/2008/12/18/avoid-memory-leaks-on-android/comment-page-1/) – Emmanuel

0

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

Вот некоторые ресурсы, чтобы посмотреть на: http://developer.android.com/reference/android/content/Intent.html How do I get extra data from intent on Android?

0

, если вы хотите изменить активность фона в режиме исполнения, или внесите какие-либо изменения из-за пределов Activity Activity2. Перейдите в broadCast. С Activity1 на Activity Activity2, BroadCastReceiver в Activity2 сделайте необходимые изменения. - (это способ смены фона, когда он виден) в вашем случае используйте SharedPreferences для сохранения фона и в onResume() читайте SharedPreferences:

Пример: (здесь я буду писать код без проверки, но вы можете сделать)

public void onClick(View v) { 
// set background.. 
SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE); 
    SharedPreferences.Editor editor = bgshared.edit(); 
     editor.putString("BKGRND", "bg1").commit(); 
// OR  editor.putString("BKGRND", "bg2").commit(); 
// OR editor.putString("BKGRND", "bg3").commit(); 
} 

В onResume Do:

SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE); 
String Bgfromshared = bgshared.getString("BKGRND", "Error"); 
if(Bgfromshared.equals("bg1")) 
    background.setBackgroundResource(R.drawable.customBackground1); 
else if(Bgfromshared.equals("bg2")) 
    background.setBackgroundResource(R.drawable.customBackground2);//other drawable 
else if(Bgfromshared.equals("bg3")) 
    background.setBackgroundResource(R.drawable.customBackground3); 
else if(Bgfromshared.equals("Error")); //do no thing (put ;). 

UPDATE: (если у вас есть более чем один вид деятельности, использовать один SharedPreferences для всех видов деятельности)

// you are in activity1: 
public void onClick(View v) { 
// set background.. 
SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE); 
    SharedPreferences.Editor editor = bgshared.edit(); 
     editor.putString("BKGRND_ACTIVITY1", "bg1").commit(); 
// OR  editor.putString("BKGRND_ACTIVITY1", "bg2").commit(); 
// OR editor.putString("BKGRND_ACTIVITY1", "bg3").commit(); 
} 


// you are in activity2: 
public void onClick(View v) { 
// set background.. 
SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE); 
    SharedPreferences.Editor editor = bgshared.edit(); 
     editor.putString("BKGRND_ACTIVITY2", "bg1").commit(); 
// OR  editor.putString("BKGRND_ACTIVITY2", "bg2").commit(); 
// OR editor.putString("BKGRND_ACTIVITY2", "bg3").commit(); 
} 

В onResume Do:

 SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE); 
// if you are in activity 1 : 
String Bgfromshared = bgshared.getString("BKGRND_ACTIVITY1", "Error"); 
// if you are in activity 2 : 
String Bgfromshared = bgshared.getString("BKGRND_ACTIVITY2", "Error"); 
    if(Bgfromshared.equals("bg1")) 
     background.setBackgroundResource(R.drawable.customBackground1); 
    else if(Bgfromshared.equals("bg2")) 
     background.setBackgroundResource(R.drawable.customBackground2);//other drawable 
    else if(Bgfromshared.equals("bg3")) 
     background.setBackgroundResource(R.drawable.customBackground3); 
    else if(Bgfromshared.equals("Error")); //do no thing (put ;). 
+0

Итак, сэр, вы имеете в виду, что мне нужно сделать класс SharedPreferences для каждого вида деятельности? –

+0

Да, вы можете, но лучший способ - создать ключ для каждого действия в том же файле SharedPreferences. Я буду ОБНОВЛЯТЬ ответ выше для многих видов деятельности. –

+0

Если это ответ на ваш вопрос, пожалуйста, ответьте на этот вопрос. –

Смежные вопросы