微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在java,Android中运行应用程序时,是否可以在不重置的情况下使用switchCompat?

如何解决在java,Android中运行应用程序时,是否可以在不重置的情况下使用switchCompat?

我有秒表应用。 我在主布局上有不同背景的 Switchcompat。 当我在运行时间时轻按开关时,它会重置为 00:00:00。

有没有办法不用重置定时器就可以使用开关?

这是代码的一些部分。

MainActivity

    SwitchCompat switchCompat;
    SharedPreferences sharedPreferences = null;

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

        switchCompat = findViewById(R.id.switchCompat);
        sharedPreferences = getSharedPreferences("night",0);
        Boolean booleanValue = sharedPreferences.getBoolean("NightMode",false);
        if (booleanValue) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            switchCompat.setChecked(true);
        }

        switchCompat.setonCheckedchangelistener(new CompoundButton.OnCheckedchangelistener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                if (isChecked) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    switchCompat.setChecked(true);
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putBoolean("NightMode",true);
                    editor.commit();
                }else {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    switchCompat.setChecked(false);
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putBoolean("NightMode",false);
                    editor.commit();
                }
            }
        });
    }

解决方法

签出 saving instance state pattern - 存储时间值并在 Activity 重新创建时重新存储

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putString("SwitchText",switchCompat.getText().toString());
}

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

    switchCompat = findViewById(R.id.switchCompat);
    if (savedInstanceState != null) { // is null on first start
        String switchText = savedInstanceState.getString("SwitchText");
        // may be null when no value stored under given key
        if (switchText != null) switchCompat.setText(switchText);
    }
    ...

Activity 被重新创建/重新启动,因为在 onCheckedChanged 中您正在调用 AppCompatDelegate.setDefaultNightMode - 这迫使 Activity 重新启动并应用新主题,您必须编写一些额外的保存之前状态的代码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。