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"