通过java在XML中声明的访问开关

时间:2015-04-15 19:47:38

标签: java android xml android-studio switch-statement

我用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开关?

谢谢!

4 个答案:

答案 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);

}

这对我有用。