- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个小 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 duringonCreate()
oronRestoreInstanceState()
. 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/
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!