Как перейти к другому занятию, не заканчивая его? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть активность на панели инструментов, в которой есть кнопка настроек, после нажатия на которую она перейдет к активности настроек без завершения активности на панели мониторинга. В моих действиях по настройке есть переключатель, который проигрывает музыку c, когда отмечен, и останавливает музыку c, когда не отмечен. Существует также кнопка «Назад», которая направляет пользователя обратно на панель инструментов, после нажатия на которую вы просто завершите действие по настройке. Однако в ситуации, когда я проверяю переключатель, проигрыватель musi c воспроизводится, затем я нажимаю кнопку «Назад», меня перенаправляют на панель инструментов, но musi c по-прежнему воспроизводится в фоновом режиме. Однако, если я попытаюсь снова нажать кнопку настроек, чтобы go вернуться к действию настроек, переключатель не будет проверен, но музыка c играет. Что я хотел, так это то, как я могу go вернуться к активности на приборной панели, нажав кнопку «Назад», не завершая действия с настройками, чтобы состояние переключателя по-прежнему проверялось всякий раз, когда я снова нажимаю кнопку настроек от действия на приборной панели до go к активности настроек.

Активность панели инструментов

 public void onClick(View v) {
    Intent i;

    switch(v.getId())
    {
       case R.id.settings_card:
            i = new Intent(this, SettingsActivity.class);
            startActivity(i);
            break;
    }

Активность настроек

backButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

Включение компонента при активности настроек

playstop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(isChecked == true)
            {
                startService(new Intent(SettingsActivity.this, ApplicationService.class));
            }
            else
            {
                stopService(new Intent(SettingsActivity.this, ApplicationService.class));
            }
        }
    });

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Не думаю, что ваша архитектура хороша, поскольку вы сохраняете состояние в отдельных действиях Тем не менее, вы должны быть в состоянии получить то, что вы хотите, просто переключаясь между двумя вашими действиями. Для этого вам нужно добавить FLAG_ACTIVITY_REORDER_TO_FRONT при запуске Activity:

i = new Intent(this, SettingsActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

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

0 голосов
/ 05 марта 2020

Для таких вещей, как настройки, которые должны быть сохранены в вашем приложении, даже когда пользователи закрывают его и открывают снова, хорошо использовать SharedPreferenes . Вы можете сохранить состояние «кнопки проверки» в SharedPreferences, а затем загрузить его в метод onResume в настройках. Это решение сохранит состояние ваших настроек переключения, даже если пользователи закроют все приложение.

Другим решением является использование Bundle и onSavedInstance (): https://developer.android.com/guide/components/activities/activity-lifecycle#saras https://developer.android.com/guide/components/activities/activity-lifecycle#instance -состояния

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

...