[英]Why setOnChangeListener don't work properly?
我有三個帶有setOnChangeListener的開關。 前兩個工作正常。 但是由於某些原因,第三個是什么也不做。 我讀了50次代碼,但找不到錯誤。 它應該將一個int保存到SharedPreferences並顯示Toast。 調試器表明,他進入了案例但不執行它。 執行此操作后,MainActivity應該加載保存的值並更改布局。 但是代碼甚至沒有保存。 當我重新啟動SettingsTheme活動時,應該加載開關的狀態,並且該狀態對於前兩個有效,但不適用於Swtich稱為行的狀態。
如果您能提供幫助,那就太好了!
我還嘗試將第3個偵聽器的處理內容放到第2個偵聽器中,但是它不起作用。 試圖刪除onChangeListener中的保存內容並進行烤面包,嘗試刪除MainActivity中的variabels內容,但沒有任何效果。
public class SettingsTheme extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_theme);
setTitle("Themen");
final Switch darkmode=findViewById(R.id.darkmode);
final Switch auto_darkmode=findViewById(R.id.auto_darkmode);
final Switch rows=findViewById(R.id.modul_rows);
if(variables.LoadInt("dark_mode")==1){darkmode.setChecked(true);}
if(variables.LoadInt("dark_mode")==2){
auto_darkmode.setChecked(true);
darkmode.setBackgroundResource(R.color.light_grey);
darkmode.setClickable(false);
darkmode.setVisibility(View.GONE);}
if(variables.LoadInt("rows")==3){rows.setChecked(true);}
darkmode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked==true){
variables.SaveInt("dark_mode",1);
}
else{
variables.SaveInt("dark_mode",0);
}
}
});
auto_darkmode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked==true){
variables.SaveInt("dark_mode",2);
darkmode.setBackgroundResource(R.color.light_grey);
darkmode.setClickable(false);
darkmode.setChecked(false);
darkmode.setVisibility(View.GONE);
}
else{
variables.SaveInt("dark_mode",0);
darkmode.setClickable(true);
darkmode.setBackgroundResource(0);
darkmode.setVisibility(View.VISIBLE);
}
}
});
rows.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked==true){
variables.SaveInt("rows",3);
Toast.makeText(SettingsTheme.this, "3x7 Layout gewählt",Toast.LENGTH_SHORT);
}
else{
variables.SaveInt("rows",2);
Toast.makeText(SettingsTheme.this,"2x3 Layout,Toast.LENGTH_SHORT); }
}
});}
public class variables {
public static SharedPreferences Var;
public static int LoadInt(String s){
Var=MainActivity.PublicContext.getSharedPreferences(s, Context.MODE_PRIVATE);
return Var.getInt(s,0);
}
public static void SaveInt(String s, int i){
SharedPreferences.Editor editor=Var.edit();
editor.putInt(s,i).apply();
}
public static String LoadString(String s){
Var=MainActivity.PublicContext.getSharedPreferences(s, Context.MODE_PRIVATE);
return Var.getString(s,"");
}
public static void SaveString(String s, String sts){
SharedPreferences.Editor editor=Var.edit();
editor.putString(s,sts).apply();
}
}
public class MainActivity extends AppCompatActivity {
public View root;
public static Context PublicContext=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(PublicContext==null)PublicContext=getApplicationContext();
View view1=getLayoutInflater().inflate(R.layout.activity_main_row2,null);
View view2= getLayoutInflater().inflate(R.layout.activity_main_row3,null);
if(variables.LoadInt("rows")==3){setContentView(view2);}
else{setContentView(view1);}
}
}
您的Toast
缺少.show()
。 因此,即使執行代碼,也不會顯示任何祝酒詞。
我通過更改variables.java中的代碼解決了這個問題。 我使用了TinyDB類( https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo/blob/master/TinyDB.java ):
public class variables {
public static TinyDB Var=new TinyDB(MainActivity.PublicContext);
public static int LoadInt(String s){
return Var.getInt(s);
}
public static void SaveInt(String s, int i){
Var.putInt(s,i);
}
public static String LoadString(String s){
return Var.getString(s);
}
public static void SaveString(String s, String sts){
Var.putString(s,sts);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.