切换在方向更改后保持检查,即使我以编程方式设置了false。
以下是一个示例代码:
public class MainActivity extends AppCompatActivity {
Switch sw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sw = (Switch)findViewById(R.id.sw);
sw.setChecked(false);
System.out.println(sw.isChecked());
}
}
sout打印为false,但交换机会在界面上进行检查。这是布局文件中的switch xml元素:
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sw"
android:checked="false"/>
我错过了什么?
答案 0 :(得分:0)
Orientation Change
未选中复选框的原因是Android会在Orientation Change
上触发活动方法,如下所示:
onPause -> onSave -> onStop -> onCreate -> onStart -> onResume
如果您希望在方向更改时触发sw.setChecked(false);
,请将其放在您的Activities onResume()函数中,如下所示:
//Other Code Above, i.e. onCreate();
@Override
public void onResume(){
super.onResume();
// Put your code here...
sw.setChecked(false);
}
还有其他选项可阻止在配置更改
下按此Android Documentation重新启动活动在某些特殊情况下,您可能希望绕过重新启动 基于一种或多种配置更改的活动。这是 在其清单中使用android:configChanges属性完成。任何 你会说你在那里处理的配置改变类型 接到您当前活动的电话 onConfigurationChanged(配置)方法而不是 重新启动。如果配置更改涉及任何您不这样做 但是,处理活动仍将重新启动 onConfigurationChanged(配置)将不会被调用。 重新启动。
最后通过onSaveInstanceState(Bundle savedInstanceState)
和onRestoreInstanceState(Bundle savedInstanceState)
选择另一个选项:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean("YourCheckBox", enable);
super.onSaveInstanceState(savedInstanceState);
}
使用此方法检索它:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
boolean mychkbox = savedInstanceState.getBoolean("YourCheckBox");
}
答案 1 :(得分:0)
更一般地说,您可能希望覆盖以下内容,以便在方向更改(以及重新创建活动)时保留此状态
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SOME_BOOL_VALUE, boolVar);
}
如果onCreate
已设置
savedInstanceState
中阅读