android.widget.Switch - держать состояние на паузе?

Я думаю, что ваша оболочка по умолчанию - dash или sh, а не bash в этом случае. echo $SHELL должен показать его, если он покажет /bin/sh, это может быть ссылка, поэтому убедитесь, что ls -l /bin/sh не ссылается на какую-либо другую оболочку.

0
задан John-Henry 27 February 2019 в 19:42
поделиться

1 ответ

Добавление ответа вместо продолжения в комментариях.

По умолчанию Android будет сохранять состояние вашего пользовательского интерфейса тогда и только тогда, когда вы используете компоненты по умолчанию (имеется в виду TextView, Button, Switch и т. Д.) И у вашего компонента есть идентификатор. Это состояние сохранится только в том случае, если ОС убивает приложение и пользователь возвращается к нему. Это означает, что если пользователь нажмет кнопку Home, а затем вернется к вашему Activity на более позднем этапе, состояние пользовательского интерфейса всех компонентов по умолчанию этого конкретного Activity будет восстановлено. При нажатии кнопки Home Activity останавливается и вызывается onSaveInstanceState, поэтому здесь у вас есть возможность сохранить любое состояние, которое не поддерживается компонентами по умолчанию, или если у вас есть данные, которые вы скачали, например, используется для заполнения ваших компонентов пользовательского интерфейса данными.

Если пользователь нажмет кнопку Back, приложение будет убито, и любое состояние пользовательского интерфейса не будет восстановлено по умолчанию. Чтобы преодолеть это, вы можете использовать SharedPreferences или любой другой механизм локального хранилища для хранения вашего пользовательского интерфейса на диске.

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

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

Оба состояния (savedInstanceState и то, что входит в SharedPreferences) должны быть восстановлены в методе onCreate, так как он всегда вызывается всякий раз, когда Activity воссоздается или создается впервые, в то время как onRestoreInstanceState ] не всегда можно вызывать.

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getName();
    private static final String CHECKBOX__STATE = "CHECKBOX__SAVE_STATE";

    private Switch checkbox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkbox = findViewById(R.id.checkbox);

        final boolean isChecked;
        if (savedInstanceState != null) {
            isChecked = savedInstanceState.getBoolean(CHECKBOX__STATE);
        } else {
            isChecked = PreferenceManager.getDefaultSharedPreferences(this)
                    .getBoolean(CHECKBOX__STATE, false);
        }

        // Setting the state (if any) of the Switch.
        checkbox.setChecked(isChecked);

        checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Log.d(TAG, "onCheckedChanged: isChecked = true - log location");
                } else {
                    Log.d(TAG, "onCheckedChanged: isChecked = false - stop logging location");
                }
            }
        });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(CHECKBOX__STATE, checkbox.isChecked());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        PreferenceManager.getDefaultSharedPreferences(this)
                .edit()
                .putBoolean(CHECKBOX__STATE, checkbox.isChecked())
                .apply();
    }
}

Надеюсь, это поможет: -)

0
ответ дан Darwind 27 February 2019 в 19:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: