我用XML创建了一个开关。它被创建为被检查。
即使应用程序重新启动,我也有一个布尔值来保存,我需要的是在应用程序启动时匹配布尔值的开关。我似乎无法弄清楚如何改变它。
删除android:checked="true(or false)"
是否允许我在应用启动时编辑代码,或者无关紧要?
我尝试使用if-else语句在启动onCreate()时将开关设置到正确的位置,但这只会使应用程序崩溃。
这是我的XML:
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/SwitchName"
android:id="@+id/switch1"
android:layout_alignBottom="@+id/dBellButton"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:clickable="true"
android:onClick="onToggleClicked"
android:checked="true" />
这是我的onCreate()方法:
MediaPlayer dBell;
boolean vibeOn;
Switch switchConv = (Switch) findViewById(R.id.switch1);
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
dBell = MediaPlayer.create(this, R.raw.doorbell);
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
vibeOn = pref.getBoolean("vibeRemember", true);
if (vibeOn = true) {
switchConv.setChecked(true);
} else {
switchConv.setChecked(false);
}
}
我认为if-else语句是在创建时使应用程序崩溃的原因,但是注释掉这个块并没有解决问题。所以,我也评论了Switch switchConv = (Switch) findViewById(R.id.switch1);
。注释掉这两个块可以使代码成功运行。
我想知道我的findViewById
是否是造成问题的原因。
有没有其他方法可以通过我的.java引用我的XML开关?
谢谢!
森
答案 0 :(得分:0)
在声明元素之前,首先需要setContentView。在setContentView之后移动开关初始化。
并且如果(vibeOn = true)到 if(vibeOn)
响铃吗?您正在使用赋值运算符而不是比较器。并且布尔值可以直接使用而无需比较器。
答案 1 :(得分:0)
private Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
switchConv = (Switch)this.findViewById(R.id.switch1);
SharedPreferences pref = this.getSharedPreferences("MyPref", MODE_PRIVATE);
switchCon.setChecked(pref.getBoolean("vibeRemember", true));
}
答案 2 :(得分:0)
您无法静态声明视图,因为您尚未调用setContentView()
。设置内容视图后,您必须声明所有视图:
Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
...
setContentView(R.layout.activity_main);
switchConv = (Switch) findViewById(R.id.switch1);
...
}
答案 3 :(得分:0)
试试这个:
Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
.......
switchConv = (Switch)this.findViewById(R.id.switch1);
}
这对我有用。