我正在创建一个应用程序,其中有两个切换按钮,一个用于Twitter登录,另一个用于Twitter登录。
但没有任何事情可以帮助我,这就是发布新问题的原因。
所以基本上我有一个登录和注销的开关按钮。它的工作非常好。如果我关闭应用程序并再次返回应用程序,那也正常工作,即会话保持不变但状态按钮设置为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的东西,除了切换按钮的状态外,一切正常。
如果您需要更多信息,请与我们联系。 感谢
答案 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();;
}
}
});