通过 java 在 XML 中声明的访问开关
Access switch declared in XML via java
我在 XML 中创建了一个开关。它的开关是在检查时创建的。
即使应用程序重新启动,我也得到了一个要保存的布尔值,我所需要的只是在应用程序启动时匹配布尔值的开关。我似乎不知道如何更改它。
删除 android:checked="true(or false)"
是否允许我在应用程序启动时编辑代码,还是没有关系?
我试过在 onCreate() 启动时使用 if-else 语句将开关设置到正确的位置,但这只会导致应用程序崩溃。
这是我的 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 中引用我的开关?
谢谢!
内森
在声明元素之前需要先设置ContentView。在 setContentView 之后移动您的开关初始化。
还有 if (vibeOn = true) 到 if (vibeOn)
它响铃了吗?您正在使用赋值运算符而不是比较器。而且布尔值也可以直接使用而无需比较器。
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));
}
您不能静态声明视图,因为您还没有调用 setContentView()
。设置内容视图后必须声明所有视图:
Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
...
setContentView(R.layout.activity_main);
switchConv = (Switch) findViewById(R.id.switch1);
...
}
试试这个:
Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
.......
switchConv = (Switch)this.findViewById(R.id.switch1);
}
这对我有用。
我在 XML 中创建了一个开关。它的开关是在检查时创建的。
即使应用程序重新启动,我也得到了一个要保存的布尔值,我所需要的只是在应用程序启动时匹配布尔值的开关。我似乎不知道如何更改它。
删除 android:checked="true(or false)"
是否允许我在应用程序启动时编辑代码,还是没有关系?
我试过在 onCreate() 启动时使用 if-else 语句将开关设置到正确的位置,但这只会导致应用程序崩溃。
这是我的 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 中引用我的开关?
谢谢!
内森
在声明元素之前需要先设置ContentView。在 setContentView 之后移动您的开关初始化。
还有 if (vibeOn = true) 到 if (vibeOn)
它响铃了吗?您正在使用赋值运算符而不是比较器。而且布尔值也可以直接使用而无需比较器。
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));
}
您不能静态声明视图,因为您还没有调用 setContentView()
。设置内容视图后必须声明所有视图:
Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
...
setContentView(R.layout.activity_main);
switchConv = (Switch) findViewById(R.id.switch1);
...
}
试试这个:
Switch switchConv;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
.......
switchConv = (Switch)this.findViewById(R.id.switch1);
}
这对我有用。