2013-11-13 4 views
0

Вот мой GamePlay код активностине в состоянии восстановить сохраненный экземпляр деятельности

public class GamePlay extends Activity implements OnClickListener { 

private boolean disableSound = false; 
//..... 
//Code Code 
//..... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //..... 
    //Code Code 
    //..... 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("disableSound", disableSound); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    disableSound = savedInstanceState.getBoolean("disableSound"); 
    Menu menu = (Menu)findViewById(R.menu.tic_tac_toe); 
    MenuItem toggleSoundItemMenu = menu.findItem(R.id.toogle_sound_menu); 
    if(disableSound) 
     toggleSoundItemMenu.setTitle(R.string.toggle_sound_off_label); 
    else 
     toggleSoundItemMenu.setTitle(R.string.toggle_sound_on_label); 

} 

//other functions and code 
} 

Сейчас на игру рестарта я перезапуск деятельности. Следующий код находится внутри onClickListener() с соответствующим футляром

case R.id.game_play_restart_button: 
     Intent restartActivity = new Intent(this,GamePlay.class); 
     finish(); 
     startActivity(restartActivity); 
     break; 

Но все же состояние не сохраняется. Я отключу звук и перезагрузив игру, после чего звук снова включится, и это поведение по умолчанию. Что мне не хватает? Любое предложение приветствуется.

+0

Я считаю, что это ожидается. После перезапуска ваша деятельность будет уничтожена и воссоздана. Это не будет сохраняться в государстве. –

ответ

1

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

Вы должны рассмотреть вопрос о принятии этого булево как дополнительный в намерении, как:

restartActivity.putExtra("disableSound", disableSound) 

, а затем на OnCreate вашей деятельности:

getIntent().getBooleanExtra("disableSound", false) 

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

+0

Сохраняется ли пар имя-значение, если действие уничтожено указанным методом? –

+0

Я не уверен, что я прекрасно понимаю вопрос. Дело в том, что ценность, которую вы вкладываете в намерение, сохраняется по намерению, пока действие уничтожается, а новый - запущен. Это означает, что он по-прежнему будет доступен после начала новой активности. – k3v1n4ud3

+0

. Я получаю вашу точку зрения, мы ставим эти значения в намерении, которое мы используем, чтобы начать новую деятельность. И эта ценность сохраняется в новой активности, для которой было создано намерение, в то время как текущая (старая активность) уничтожена. –

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