[英]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.