如何在打开应用程序后仅重新创建一次 activity?
How do I recreate the activity only once after opening the application?
如何在打开应用程序后仅重新创建一次 activity?
我试过这样做,但没有成功。无休止地重新创建()
onCreate
中的refreshLang()
private fun refreshLang() {
PreferenceManager.getDefaultSharedPreferences(this).apply {
val checkRun = getString("FIRSTRUN", "DEFAULT")
if (checkRun == "YES") {
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("FIRSTRUN", "NO").apply()
recreate()
}
}
}
和 SharPref.putString("FIRSTRUN", "YES").apply() 在 onDestroy 中让它在你下次 运行 时再次工作它。
使用 onResume 方法
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
}
请参考:Activity class
recreate()
它创建新实例并启动新的 activity 生命周期。
因此,当您调用 recreate()
时,它会调用 onCreate()
并进入无限循环。
您已添加一些条件来避免此溢出。
编辑:
使用.equals
代替==
if ("YES".equals(checkRun)) {
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("FIRSTRUN", "NO").apply()
recreate()
}
我建议你不要使用recreate()
。它将调用 onCreate
和 onDestory()
.
参考下面的代码。
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean recreateRequested = true;
Intent currentIntent = getIntent();
if (currentIntent.hasExtra("recreateRequested")){
recreateRequested = currentIntent.getBooleanExtra("recreateRequested", true);
}
if (recreateRequested) {
Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("recreateRequested", false);
startActivity(intent);
finish();
}
}
你不能在你的if
条件
中比较两个这样的String
checkRun == "YES"
这是 String
的两个独立实例,因此它们在 this 含义上永远不相等(==
- 相同的对象)
改用这个
"YES".equals(checkRun)
equals
将比较比较对象的“内容”,在 String
情况下它将比较文本
如何在打开应用程序后仅重新创建一次 activity?
我试过这样做,但没有成功。无休止地重新创建()
onCreate
中的refreshLang()private fun refreshLang() {
PreferenceManager.getDefaultSharedPreferences(this).apply {
val checkRun = getString("FIRSTRUN", "DEFAULT")
if (checkRun == "YES") {
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("FIRSTRUN", "NO").apply()
recreate()
}
}
}
和 SharPref.putString("FIRSTRUN", "YES").apply() 在 onDestroy 中让它在你下次 运行 时再次工作它。
使用 onResume 方法
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
}
请参考:Activity class recreate()
它创建新实例并启动新的 activity 生命周期。
因此,当您调用 recreate()
时,它会调用 onCreate()
并进入无限循环。
您已添加一些条件来避免此溢出。
编辑:
使用.equals
代替==
if ("YES".equals(checkRun)) {
PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("FIRSTRUN", "NO").apply()
recreate()
}
我建议你不要使用recreate()
。它将调用 onCreate
和 onDestory()
.
参考下面的代码。
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean recreateRequested = true;
Intent currentIntent = getIntent();
if (currentIntent.hasExtra("recreateRequested")){
recreateRequested = currentIntent.getBooleanExtra("recreateRequested", true);
}
if (recreateRequested) {
Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("recreateRequested", false);
startActivity(intent);
finish();
}
}
你不能在你的if
条件
String
checkRun == "YES"
这是 String
的两个独立实例,因此它们在 this 含义上永远不相等(==
- 相同的对象)
改用这个
"YES".equals(checkRun)
equals
将比较比较对象的“内容”,在 String
情况下它将比较文本