2015-04-14 5 views
0

Я работаю над приложением, в котором я хотел бы, чтобы пользователь мог выбрать из списка параметров цвета в настройках (весь код, показанный ниже). Однако, когда они делают это, это не изменяется после активности настроек. Он изменяется, когда вы покидаете деятельность (скажем, домой) и возвращаетесь. Я считаю, что это потому, что onCreate() не вызывается, проблема в том, что если я снова сделаю setContentView(), все приложение не отвечает. И если я делаю recreate() Он падает из-за музыкального проигрывателя (опять код ниже). Пожалуйста, оставьте ответ, даже если вы просто подумаете, что это сработает. Заранее спасибо.Как изменить тему в настройках приложения

Код: SettingsActivity.java (также не могу получить строку изменить на этом)

public class SettingsActivity extends PreferenceActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     String themeName = settings.getString("theme", "DarkBlue"); 
     int theme = MyThemer.getThemeid(themeName); 
     if(Build.VERSION.SDK_INT > 20){ 
      int themeDark = MyThemer.getColorPrimaryDark(themeName); 
      getWindow().setStatusBarColor(getResources().getColor(themeDark)); 
     } 
     setTheme(theme); 
     addPreferencesFromResource(R.layout.settings_activity); 

     String themName = settings.getString("theme", "DarkBlue"); 
     int barColor = MyThemer.getColorPrimary(themName); 

     LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent(); 
     Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false); 
     bar.setBackgroundColor(getResources().getColor(barColor)); 
     root.addView(bar, 0); // insert at top 
     bar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 
    } 
} 

Код: MainActivity.java

OnCreate()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    mySetTheme(); 
    setContentView(R.layout.activity_game_over); 

setTheme()

private void mySetTheme(){ 
    themeName = settings.getString("theme", "DarkBlue"); 
    int theme = MyThemer.getThemeid(themeName); 
    setTheme(theme); 
    if(Build.VERSION.SDK_INT > 20){ 
     int themeDark = MyThemer.getColorPrimaryDark(themeName); 
     getWindow().setStatusBarColor(getResources().getColor(themeDark)); 
    } 
} 

onResume()

public void onResume(){ 
    super.onResume(); 
    playMusic = settings.getBoolean("playMusic", true); 
    if(playMusic){ 
     backgroundMusicPlayer = new BackgroundMusicPlayer(); 
     backgroundMusicPlayer.execute(getApplicationContext()); 
    } 
} 

OnPause()

public void onPause(){ 
    super.onPause(); 
    if(playMusic){ 
     backgroundMusicPlayer.cancelMusic(); 
     backgroundMusicPlayer.cancel(true); 
    } 
} 

backgroundMusicPlayer.java

public class BackgroundMusicPlayer extends AsyncTask<Context, Void, Void>{ 

    MediaPlayer player; 
    @Override 
    protected Void doInBackground(Context... params) { 
     player = MediaPlayer.create(params[0], R.raw.background); 
     player.setLooping(true); 
     player.setVolume(50,50); 
     player.start(); 
     return null; 
    } 

    public void cancelMusic(){ 
     player.stop(); 
     player.reset(); 
     player.release(); 
    } 
} 

ответ

0

Просто пришлось заменить finish(); с

Intent home = new Intent(getApplicationContext(), MainActivity.class); 
       startActivity(home); 

Спасибо, что прочитали мой вопрос.

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