Android 活动';通过ActionBar转到新活动时,不会调用s savedInstanceState()
任何帮助都将不胜感激,因为我快完成了,这件小事让我非常烦恼 我有三个活动中的一个,在Android 活动';通过ActionBar转到新活动时,不会调用s savedInstanceState(),android,android-activity,android-actionbar,textview,android-savedstate,Android,Android Activity,Android Actionbar,Textview,Android Savedstate,任何帮助都将不胜感激,因为我快完成了,这件小事让我非常烦恼 我有三个活动中的一个,在onCreate()中,它从数据库查询填充TextView。这项活动也是主要活动。通过操作栏执行的其他2项活动,如下面显示的代码。我这里有savedInstanceState()和onrestoreinnstancestate(),它们只有在您完全退出应用程序时才起作用,这很好,但我也希望这样,当您从操作栏转到另一个活动时,TextView就不必重新查询数据库。我希望textview与您离开时一样,因为每次带着操
onCreate()
中,它从数据库查询填充TextView
。这项活动也是主要活动。通过操作栏执行的其他2项活动,如下面显示的代码。我这里有savedInstanceState()
和onrestoreinnstancestate()
,它们只有在您完全退出应用程序时才起作用,这很好,但我也希望这样,当您从操作栏转到另一个活动时,TextView
就不必重新查询数据库。我希望textview
与您离开时一样,因为每次带着操作栏离开时,textview
都会触发一个全新的查询,我不希望这样。我希望它仍然具有用户第一次到达时第一次查询的结果
我尝试使用finish()
和onStop()
方法来帮助终止活动,以便在活动被销毁时调用saveOnInstanceState()
,但该活动要么不起作用,要么我没有将其放置在正确的位置。有什么想法吗
在onCreate()中应用savedInstanceState:
onSavedInstanceState()和onRestoreInstanceState()
通过ActionBar进入不同的活动:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.Openning_Screen:
Toast.makeText(this, "This is the Story of the Day", Toast.LENGTH_SHORT)
.show();
return true;
case R.id.The_List:
Intent A_ListIntent = new Intent(this, A_Where_List.class);
startActivity(A_ListIntent);
return true;
case R.id.Settings:
Intent SavedStoriesIntent = new Intent(this, Settings.class);
startActivity(SavedStoriesIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
你看到的是预期的行为 调用
startActivity(intent)
不会完成/破坏您当前的活动-这就是为什么您没有调用onSaveInstanceState
的原因。当用户按下后退按钮时,您的活动将处于离开页面时的状态
你应该看到的是暂停/
恢复
要求离开并重新进入你的主要活动。你看到的是预期行为
调用startActivity(intent)
不会完成/破坏您当前的活动-这就是为什么您没有调用onSaveInstanceState
的原因。当用户按下后退按钮时,您的活动将处于离开页面时的状态
您应该看到的是,
onPause
/onResume
要求您离开并重新进入您的主要活动。我认为您的问题在于您的活动定义。默认情况下,它允许多个实例,在这种情况下,我认为您需要一个实例。因此,当您“返回”到原始活动时,它是一个新实例,并且不会调用onRestoreInstanceState()
尝试将清单中活动的启动模式设置为singleInstance
android:launchMode="singleInstance"
我认为你的问题在于你的行为。默认情况下,它允许多个实例,在这种情况下,我认为您需要一个实例。因此,当您“返回”到原始活动时,它是一个新实例,并且不会调用onRestoreInstanceState() 尝试将清单中活动的启动模式设置为singleInstance
android:launchMode="singleInstance"
感谢您的回复!因此,当我调用
onPause()
或onResume
(或两者!)时,保存值的最佳方法是什么,这样我就可以onCreate
对该容器执行它对onSavedInstanceState()所执行的操作?共享引用?只有一个常规列表或字符串数组?onPause
和onResume
会自动为您调用。查看您的代码,您不必做任何事情来重新填充活动上的文本字段。您也可以删除您的onrestoreinnstancestate
方法-您已经在onCreate
中处理所有事情了!请注意,我这样假设,您的意思是当您离开活动,然后按后退按钮重新进入活动时:“当您从actionBar转到另一个活动时,TextView仍将是相同的”Im dumb…..我的意思是,当您通过actionBar转到另一个活动时,TextView不相同…..我很抱歉。我现在就编辑,谢谢回复!因此,当我调用onPause()
或onResume
(或两者!)时,保存值的最佳方法是什么,这样我就可以onCreate
对该容器执行它对onSavedInstanceState()所执行的操作?共享引用?只有一个常规列表或字符串数组?onPause
和onResume
会自动为您调用。查看您的代码,您不必做任何事情来重新填充活动上的文本字段。您也可以删除您的onrestoreinnstancestate
方法-您已经在onCreate
中处理所有事情了!请注意,我这样假设,您的意思是当您离开活动,然后按后退按钮重新进入活动时:“当您从actionBar转到另一个活动时,TextView仍将是相同的”Im dumb…..我的意思是,当您通过actionBar转到另一个活动时,TextView不相同…..我很抱歉。我会把它编辑好的now@KellysOnTop23如果它为你解决了问题,你能接受我的回答吗。谢谢@KellysOnTop23如果它为你解决了问题,你能接受我的回答吗。谢谢
android:launchMode="singleInstance"