复选框从纵向到横向模式的句柄方向

问题描述:

我正在使用布局xml上的复选框。复选框从纵向到横向模式的句柄方向

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

该复选框被默认设置为“假” &一个图像被添加为未选中按钮。

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()中,当用户点击复选框时,图像从取消选中变为复选。用户在肖像模式下这样做。

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

请提供关于如何维持复选框状态的输入,即使方向改变。

发生这种情况的原因是,默认情况下,方向更改导致活动重新启动(即,您的当前实例已被销毁,并且使用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,设置属性 “机器人:configChanges =” 取向 “” 在所讨论的活性。这会导致方向更改时不重新启动。你想this--

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

该活动绝对

写在你的清单file..in它将作品..

+0

这只是阻止Android的从方向变化重新创建活动。但是方向改变并不是触发完整的Activity重启的唯一方式。来自[Android文档](https://developer.android.com/guide/topics/resources/runtime-changes.html)的注意事项: “自行处理配置更改可能会使其使用替代资源变得更加困难,因为系统不会自动将它们应用于您,当您必须避免由于配置更改而重新启动并且不推荐用于大多数应用程序时,应将此技术视为最后一招。“ – 2017-12-25 06:32:26