【问题标题】:How to save state of switch button?如何保存开关按钮的状态?
【发布时间】:2018-02-08 13:26:36
【问题描述】:

我的应用程序有一个 Switch。它用于打开覆盖服务。它工作正常,但问题在于开关的状态。关闭应用程序并重新启动应用程序后,它的状态发生了变化。它总是显示为关闭。

public class MainActivity extends AppCompatActivity {

private AdView mAdView;
private WindowManager windowManager;
private BillingClient mBillingClient;
Switch aSwitch;


@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.essential);
    windowManager =  (WindowManager) getSystemService(WINDOW_SERVICE);


    aSwitch = (Switch) findViewById(R.id.switch_ph1);

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

            if (isChecked == true) {

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (Settings.canDrawOverlays(getApplicationContext())) {
                        start();
                    } else {
                        Toast.makeText(getApplicationContext(), "Please permit drawing over apps.", Toast.LENGTH_SHORT).show();
                        checkDrawOverlayPermission();
                    }
                } else {
                    start();
                }
            } else {
                stop();
            }


        }
    });

【问题讨论】:

  • 查找共享首选项
  • 您可以检查您的服务是否正在运行,而不是保存按钮状态,然后使用该状态来检查/取消选中您的开关按钮

标签: android android-layout button sharedpreferences android-togglebutton


【解决方案1】:

我想到的一种脑死方法是将按钮的状态保存在您的共享首选项中。这种方式现在在您创建时,从共享首选项中读取数据并使用最后存储的值作为开关的当前状态。

存储在共享首选项中的数据仅在以下情况下才会被删除 1)用户卸载并重新安装应用程序 2) 用户明确进入应用设置并清除数据

这里有您需要知道的如何使用共享首选项的所有信息:https://developer.android.com/training/data-storage/shared-preferences.html

【讨论】:

    【解决方案2】:

    如果有任何可用的数据类,也可以将开关的状态存储在模型类级别以保存状态。 这样它也将保持列表视图中每个项目的开关状态。

    【讨论】:

      【解决方案3】:

      就像上面提到的@Vardaan Sharma 一样,SharedPreferences 有一种方法可以持久保存状态。这意味着当应用程序被杀死并重新启动时,可以直接从 SharedPreferences 中提取状态。

      还有另一种方式不是持久的。使用 onCreate 方法提供的 Bundle,您可以在 onCreate 中提取数据,然后在 onSaveInstanceState() 方法中将其保存到 bundle 中。一个很好的例子可以在这里找到:https://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/

      使用 Google 的新 ViewModel(在 Google I/O 2017 中引入的新架构组件库中提供),您还可以保存状态并使用它。请参阅此链接以获取一个很好的示例:https://medium.com/google-developers/viewmodels-persistence-onsaveinstancestate-restoring-ui-state-and-loaders-fc7cc4a6c090

      显然,您也可以将布尔值保存在 SQLite(或其他)数据库中,但我觉得在这种情况下这有点矫枉过正。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-15
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 2022-08-09
        相关资源
        最近更新 更多