Переключение между действиями
Я разрабатываю игру, и я включил переключатель в настройках активности, чтобы выключить и включить музыку в игровой активности.
Вот файл Settings.java:
public class Settings extends Activity implements OnCheckedChangeListener{
ToggleButton tbMusic;
boolean music;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
tbMusic = (ToggleButton)findViewById(R.id.tbMusic);
tbMusic.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(tbMusic.isChecked()) {
music = true;
} else {
music = false;
}
}
}
И файл Game.java (на данный момент у меня есть только это):
public class Game extends Activity {
MediaPlayer menuSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
menuSong = MediaPlayer.create(Menu.this, R.raw.menu);
menuSong.setLooping(true);
menuSong.start();
}
@Override
protected void onStop() {
super.onStop();
menuSong.stop();
}
}
Можете ли вы объяснить мне или привести пример того, как я могу сделать так, чтобы при проверке кнопки ToggleButton музыка в игре отключалась?
Спасибо!
1 ответ
Есть много разных решений для вашей проблемы. Я собираюсь дать вам 2 решения:
1 - Используйте класс Application. Все приложение может реализовать класс Application следующим образом:
public class ClassName extends Application {
}
Это супер класс, который из любой активности приложения, этот класс доступен с помощью этой команды:
getApplication();
Хорошо, вы можете прочитать что-то в интернете о том, как создать этот класс приложений. Решением вашей проблемы было бы создание переменной в классе приложения, например:
public class ClassName extends Application
{
private boolean isSoundEnabled;
public boolean getSoundEnabled() { return isSoundEnabled; }
public void setSoundEnabled(boolean isEnabled) { isSoundEnabled = isEnabled;}
@Override
public void onCreate() {
super.onCreate();
isSoundEnabled = true;
}
Таким образом, в настройках вашего класса вы можете установить эту переменную следующим образом:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(tbMusic.isChecked()) {
getApplication().setSoundEnabled ( true );
} else {
getApplication().setSoundEnabled ( false );
}
}
И каждый раз, когда вы открываете свой класс Game, вы можете проверить, как установлена эта переменная:
getApplication().getSoundEnabled();
2 - Второе решение для меня лучше, потому что вы сохраняете эту информацию в памяти, поэтому каждый раз, когда пользователь открывает приложение / игру, приложение может вспомнить, как пользователь установил при передаче эту переменную.
Таким способом мы можем запомнить флаги, настройки и восстановить эту информацию после закрытия и открытия приложения. Мы собираемся использовать объект SharedPreferences. Он используется для сохранения таких значений, как int, float, boolean и т. Д. (Простые объекты данных) в памяти телефона.
Поэтому в классе "Настройки" каждый раз, когда пользователь устанавливает звук, вы можете сохранить значение:
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
if(tbMusic.isChecked()) {
prefs.edit().putBoolean ("IS_ENABLED_VARIABLE", true ).commit();
} else {
prefs.edit().putBoolean ("IS_ENABLED_VARIABLE", false ).commit();
}
И в вашем классе Game вы можете восстановить это значение, используя этот код:
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
boolean isEnabled = prefs.getBoolean("IS_ENABLED_VARIABLE", true);
//The second parameter (true) is the value by default if the variable with the name IS_ENABLED_VARIABLE is not find for the app.
IS_ENABLED_VARIABLE -> Это имя переменной, ее нужно использовать для сохранения или восстановления. Вы можете использовать любое имя, какое пожелаете.
com.example.app -> это имя, которое вы называете в область / каталог sharedprefences в память вашего телефона. Вы можете использовать имя, которое вы хотите.
Надеюсь быть полезным, и если это так, проголосуйте за меня, пожалуйста!