簡體   English   中英

處理復選框從縱向到橫向模式的方向

[英]Handle orientation from Portrait to Landscape mode for Checkbox

我在布局xml上使用Checkbox。

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

默認情況下,“復選框”設置為“ false”,並且添加了未選中按鈕的圖像。

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時,圖像從uncheck變為check。 用戶在縱向模式下執行此操作。

當用戶將方向更改為設備的橫向模式時,對勾消失並且顯示未對勾圖像。 當方向從縱向更改為橫向時,不會保持復選框的狀態。

請提供有關即使方向發生變化也如何保持復選框狀態的輸入。

發生這種情況是因為,默認情況下,方向改變會導致活動重新啟動(即,您的當前實例被破壞,並且使用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”“。 更改方向后,這將導致它無法重新啟動。

將其寫在清單文件中。

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

絕對可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM