关闭应用程序后保持切换按钮的状态

时间:2015-12-19 17:58:28

标签: android twitter twitter-fabric

我正在创建一个应用程序,其中有两个切换按钮,一个用于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的东西,除了切换按钮的状态外,一切正常。

如果您需要更多信息,请与我们联系。 感谢

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码:

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();
        }
    });

答案 1 :(得分:0)

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();;
            }
        }
    });