gpt4 book ai didi

java - 更改设备方向时,在 onCreate() 中更改 EditText 的值无效

转载 作者:行者123 更新时间:2023-11-29 03:46:51 24 4
gpt4 key购买 nike

我的理解是,当您更改设备方向时,您的应用会被销毁并重新创建。这意味着我每次旋转设备时都应该运行 onCreate()。

我试图在每次创建应用程序时设置一个 EditText,包括每当屏幕旋转时。所以,我启动应用程序,文本字段显示“Bap”。然后我将字段的内容更改为“Boop”,然后旋转屏幕。我希望该字段现在会说“Bap”,但事实并非如此,在我更改它之后,在方向更改之前,它仍然保持不变。这是为什么?

我的 onCreate() 看起来像这样:

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

EditText editText = (EditText)findViewById(R.id.edit_message);
editText.setText("Bap", TextView.BufferType.EDITABLE);
}

值得注意的是,如果我将 setText() 调用移到 onResume() 中,一切都会像我预期的那样工作,每次旋转设备时文本字段都会重置。

注意:我意识到 a similar question has been asked ,但给出的答案并没有真正解释为什么会出现这种行为。

最佳答案

它正在发生,因为 Android 框架正在做它应该做的事情。它正在保存一个包 (SavedInstanceState),其中包含有关应用当前状态的所有信息,以供在方向更改后重新创建 View 时使用。

您是否在发布的 onCreate 中遗漏了一些代码?也许是这样的:

if (savedInstanceState == null)

如果您的 onCreate 代码包含在这样的 if 中,这就是您看不到预期结果的原因。

标准做法是让 onCreate 看起来像这样:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

if (savedInstanceState == null) {
// Your first time start-up code here, will not run on orientation change
}
// Any code you want to run EVERY time onCreate runs goes here
}

这样做是为了避免在方向更改时不必要地重新创建所有内容。

希望这对您有所帮助!

编辑

进一步调查,看起来发生的事情是这样的(从 here 收集):

设备方向改变

onSaveInstanceState(Bundle outState)
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState(Bundle inState)
onResume()

这基本上是说包正在传递到 onRestoreInstanceState,它发生在 onCreate 之后,这将解释您的情况。

因此,解决方案是将 EditText 值的设置移动到您的 onResume 方法(或覆盖 onRestoreInstanceState )。

关于java - 更改设备方向时,在 onCreate() 中更改 EditText 的值无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10492243/

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