【问题标题】:Keep the state of switch button after closing the app关闭应用后保持开关按钮状态
【发布时间】:2017-05-11 22:08:35
【问题描述】:

我正在制作一个应用,其中有两个切换按钮,一个用于 twitter 登录,另一个用于 twitter 登录。

我浏览过相同主题的其他帖子(firstsecond

但没有什么能帮助我,这就是为什么发布一个新问题。

所以基本上我有一个切换按钮来登录和注销。它工作得很好。如果我关闭应用程序并再次返回应用程序,那也可以正常工作,即会话保持不变,但状态按钮设置为 false,即不活动。

我遵循了其他答案,如果我实施了,我会收到一个错误 Caused by: java.lang.IllegalArgumentException: Callback must not be null. (用于 Twitter 登录)。

我会发布一些代码来说明情况。

tSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {

                if(isChecked){
                    SharedPreferences.Editor editor = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE).edit();
                    editor.putBoolean("service_status", tSwitch.isChecked());
                    editor.commit();
                    loginButton.performClick();
                }else{
                    Twitter.getInstance();
                    Twitter.logOut();
                    twitter_layout.setVisibility(View.GONE);
                    Toast.makeText(getApplicationContext(), "Logged out from Twitter", Toast.LENGTH_SHORT).show();
                }

            }
        });

 SharedPreferences prefs = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE);
    boolean tState = prefs.getBoolean("service_status", false);

    if(tState){
        //Do your work for service is selected on
        Toast.makeText(getApplicationContext(), "Inside the sharedPref", Toast.LENGTH_SHORT).show();
        tSwitch.setChecked(true);
    } else {
        //Code for service off
    }

如果我删除了 sharedPref 的东西,一切正常,除了那个开关按钮的状态。

如果您需要更多信息,请告诉我。 谢谢

【问题讨论】:

  • 代码哪里出错了?我还是不明白。
  • 我有两个切换按钮,一个用于 facebook 登录,另一个用于 twitter 登录。我也有两个框架布局(每个一个,我显示基本信息并允许用户发推文和分享/喜欢)。我的问题是,如果我关闭应用程序并重新启动它,我可以恢复会话但切换按钮处于“关闭”阶段(如果我没有实现SharedPreferencesthinga,并且实现 SharedPreference 后的错误是Callback must not be null..(1/2)
  • 我相信是这样,因为它正在调用onCheckChanged 函数(因为我正在更改相同的状态。如果我删除了SharedPreferences 首选项,它工作正常。我有一个函数可以检查twitter 的活跃会话也是。(2/2)
  • 向我们展示完整的日志,上面写着Callback must not be null.,即哪一行是这样说的?
  • 谢谢。但是在调整了 mahmoud 的答案后,我得到了它的工作。我不得不对此做出一些改变。再次感谢。

标签: android twitter twitter-fabric


【解决方案1】:

您可以使用以下代码:

sharedPreferences = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE);
    preferences = sharedPreferences.edit();
    tSwitch.setChecked(sharedPreferences.getBoolean("isChecked",false));
    tSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                preferences.putBoolean("isChecked",true);
            }else {
                preferences.putBoolean("isChecked",false);
            }
            preferences.commit();
        }
    });

【讨论】:

  • 谢谢。我不得不做一些改变,但我得到了它的工作。几个问题,对于sharedPreferences,你使用了小s,我们需要S(我想知道这是否是故意的,我应该在某个地方声明它?)。然后在第二行中你使用了preferecnces,你没有在任何地方声明。这个答案为我指明了正确的方向。非常感谢。
  • 只是一个小点.. 你不需要做一个 if else 只是 preferences.putBoolean("isChecked",isChecked);会工作的。
【解决方案2】:

Mahmoud 的代码不起作用,需要进行一些更改。这是一个工作版本。它基本上将切换保存在 SharedPreferences 中。

private Switch mySwitch;


 // Switch
    mySwitch = (Switch) findViewById(R.id.mySwitch);

    boolean value = true; // default value if no value was found

    final SharedPreferences sharedPreferences = getSharedPreferences("isChecked", 0);

    value = sharedPreferences.getBoolean("isChecked", value); // retrieve the value of your key
    mySwitch.setChecked(value);

    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                sharedPreferences.edit().putBoolean("isChecked", true).apply();
            }else {
                sharedPreferences.edit().putBoolean("isChecked", false).apply();;
            }
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2021-07-17
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多