处理从纵向模式到横向模式的方向

时间:2011-04-05 18:37:13

标签: android

我在布局xml上使用Checkbox。

<CheckBox android:id="@+id/chkbox" 
android:checked="false" android:button="@drawable/ic_uncheck_img">

默认情况下,复选框设置为“false”&amp;为未选中的按钮添加图像。

private CheckBox mCheck= null;

public void onCreate(Bundle savedInstanceState) {

mCheck= (CheckBox) findViewById(R.id.chkbox);
        mCheck.setChecked(false);
        mCheck.setButtonDrawable(R.drawable.ic_uncheck_img);


}

public void onClick(View view) {

            if (view.getId() == R.id.chkbox) {
                if (mCheck.isChecked())
                    mCheck.setButtonDrawable(R.drawable.ic_check_img);
                else
                    mCheck.setButtonDrawable(R.drawable.ic_uncheck_img);
}

在onClick()中,当用户点击Checkbox时,图像会从取消选中更改为检查。用户在纵向模式下执行此操作。

当用户将方向更改为设备的横向模式时,检查消失&amp;显示取消选中图像。当方向从纵向更改为横向时,不会保留复选框的状态。

请提供有关如何保持复选框状态的输入,即使方向发生变化。

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为默认情况下,方向的更改会导致活动重新启动(即,您的当前实例已被销毁,并且使用onCreate()创建了一个新的活动实例。)

我可以通过几种方式来实现您的需求。

1)使用onSaveInstanceState包保存复选框的状态,并在onCreate()中恢复它。 (请记住处理这两种情况:第一次启动活动时,savedInstanceState包不会出现。)

保存状态:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putBoolean("CHECKBOX_STATE", mCheckbox.isChecked());
    super.onSaveInstanceState(savedInstanceState);
}

在onCreate中恢复它:

if(savedInstanceState != null) {
    mCheckBox.setChecked(savedInstanceState.getBoolean("CHECKBOX_STATE"));
}

2)在AndroidManifest中,在相关活动中设置属性“android:configChanges =”orientation“”。这将导致在更改方向时不重新启动。

答案 1 :(得分:-1)

将此内容写入您的清单文件中。您希望在哪个活动中使用

<activity android:name=".TestActivity" android:configChanges="orientation|keyboardHidden"/>

当然它会起作用..