gpt4 book ai didi

android - 我的观点正在因方向改变而被重置

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:39 26 4
gpt4 key购买 nike

我有一个小 Activity ,其中包含一个 EditText、一个 ImageView 和一个按钮。当您按下按钮时,它会启动相机获取结果,当它返回时,它会将 ImageView 更改为您刚刚拍摄的照片。

但是当方向改变时, ImageView 会重置为布局上的默认值。

我尝试做的是设置一个名为 custom 的 bool 值,当您拍照时,它会将其设置为 true。我覆盖了 onConfigurationChanged(),如果自定义设置为 true,我将恢复图像。

我现在的问题是 EditText 被删除了——如何在配置更改后恢复 EditText?我的第一次尝试是将它的内容存储到 String onPause() 中,然后恢复它,但它总是空白。

最佳答案

通常当 UI View 不保持其状态时,首先要检查的是该 UI View 是否分配了 id。没有此 ID, View 将无法恢复其状态。

 <EditText android:id="@+id/text" ... />

如果这没有帮助,您需要自己保存和恢复状态。看看Handling Runtime Changes .它几乎解释了您应该做什么:

To properly handle a restart, it is important that your Activity restores its previous state through the normal Activity lifecycle, in which Android calls onSaveInstanceState() before it destroys your Activity so that you can save data about the application state. You can then restore the state during onCreate() or onRestoreInstanceState(). To test that your application restarts itself with the application state intact, you should invoke configuration changes (such as changing the screen orientation) while performing various tasks in your application.

你应该覆盖 onSaveInstanceState()并在调用时保存您的 Acitivity 状态:

@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}

然后在onCreate()onRestoreInstanceState()中恢复状态:

public void onCreate(Bundle savedInstanceState)
{
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}

如果这仍然不够,您可以覆盖 onRetainNonConfigurationInstance() 并返回将在重新创建时传递给新 Activity 对象的任何自定义对象。有关如何使用它的更多详细信息,请参阅 Handling Runtime Changes .但是这个函数在 Android 3.0+ 中被弃用了(特别是对于 FragmentActivity 它的最终版本)。所以这不能与 Fragments 一起使用(这很好,它们有自己的机制来保留跨配置更改的对象)。


最后一个 - 永远不要使用 android:configChanges。您必须有充分的理由使用它,通常这些都是性能原因。它并不意味着像现在这样被滥用:只是为了防止 UI 状态重置。如果使用此属性,那么是的,Activity UI 不会在配置更改时重新设置,但 Activity 状态仍然会在销毁和稍后重新创建时重置。

文档很好地解释了这个选项:

Note: Handling the configuration change yourself can make it much more difficult to use alternative resources, because the system does not automatically apply them for you. This technique should be considered a last resort and is not recommended for most applications

关于android - 我的观点正在因方向改变而被重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7088816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com