Переключение между действиями

Я разрабатываю игру, и я включил переключатель в настройках активности, чтобы выключить и включить музыку в игровой активности.

Вот файл 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 в память вашего телефона. Вы можете использовать имя, которое вы хотите.

Надеюсь быть полезным, и если это так, проголосуйте за меня, пожалуйста!

Другие вопросы по тегам