Seb*_*ian 7 android onconfigurationchanged android-layout android-edittext android-orientation
我有一个小活动,包含EditText和imageview以及一个按钮.当您按下按钮时,它会启动相机以获得结果,当它返回时,它会将图像视图更改为您刚刚拍摄的图像.
但是当方向改变时,imageview将重置为布局上的默认值.
我尝试做的是设置一个名为custom的布尔值,当你拍照时,它将其设置为true.我覆盖onConfigurationChanged(),如果custom设置为true,我恢复图像.
我现在的问题是EditText被删除 - 如何在配置更改后恢复EditText?我的第一次尝试是将它的内容存储到String onPause()中,然后将其恢复,但它总是空白.
ina*_*ruk 16
通常当UI视图不保持其状态时,首先要检查的是该UI视图是否已分配id.没有这个id视图就无法恢复其状态.
<EditText android:id="@+id/text" ... />
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,您需要自己保存和恢复状态.看看处理运行时更改.它几乎解释了你应该做什么:
要正确处理重新启动,重要的是您的Activity通过正常的Activity生命周期恢复其先前的状态,在该生命周期中Android会
onSaveInstanceState()在销毁Activity之前调用,以便您可以保存有关应用程序状态的数据.然后,您可以在onCreate()或期间恢复状态onRestoreInstanceState().要测试应用程序在应用程序状态不变的情况下重新启动自身,您应该在应用程序中执行各种任务时调用配置更改(例如更改屏幕方向).
您应该onSaveInstanceState()在调用时覆盖并保存您的Acitivity状态:
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
Run Code Online (Sandbox Code Playgroud)
然后恢复状态onCreate()或onRestoreInstanceState():
public void onCreate(Bundle savedInstanceState)
{
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
Run Code Online (Sandbox Code Playgroud)
如果这仍然不够,您可以覆盖onRetainNonConfigurationInstance()并返回任何将在重新创建时传递给新活动对象的自定义对象.有关如何使用它的更多详细信息,请参阅处理运行时更改.但是这个功能在Android 3.0+中已被弃用(特别是FragmentActivity在最终的位置).所以这不能与Fragments一起使用(很好,它们有自己的机制来保持对象的配置变化).
最后一个 - 永远不要使用android:configChanges.你必须有充分的理由使用它,通常这些是性能原因.它并不意味着以现在的方式被滥用:只是为了防止UI状态重置.如果使用此属性,则是,在配置更改时不会重新设置活动UI,但在销毁并稍后重新创建活动状态时仍将重置.
该文档很好地解释了这个选项:
注意:自行处理配置更改会使使用备用资源变得更加困难,因为系统不会自动为您应用它们.此技术应被视为最后的手段,不建议用于大多数应用程序
您可以通过添加android:configChanges="orientation"到清单中的活动行来强制您的活动在方向更改后不重新加载。
| 归档时间: |
|
| 查看次数: |
11891 次 |
| 最近记录: |