【问题标题】:onRestoreInstance not getting called while switching between activities在活动之间切换时未调用 onRestoreInstance
【发布时间】:2016-07-16 12:02:43
【问题描述】:

我正在尝试在两个活动之间切换。 在活动 1 中,我有名为 GoToSecond 的按钮转到第二个活动。 同样,在活动 2 中,将名为 GoToFirst 的按钮转到第一个活动。

我在第一个活动中使用了日志消息。

点击 GoToSecond 按钮时我得到的订单是 上创建

开始

onResume

onSaveInstance

在停止

然后它切换到第二个活动。 现在在第二个活动中,当我单击按钮 GoToFirst 时,第一个活动打开并 第一个活动的日志顺序是

onCreate

开始

onResume ..

为什么在 onStart 之后没有调用 onRestoreInstance? 即使存储了实例??

谁能帮帮我?

这是第一个活动的代码:

public class MainActivity extends AppCompatActivity {
EditText hello;
Button b1;
public static String TAG="Prajwal";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    hello=(EditText) findViewById(R.id.hello);
    Log.d(TAG,"OnCreate counter 1");
    b1=(Button) findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    Intent i=new Intent(MainActivity.this,Main2Activity.class);
    startActivity(i);
}
});

我没有在代码中添加日志消息。

第二个活动代码是

public class Main2Activity extends AppCompatActivity {
Button b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    b2=(Button) findViewById(R.id.b2);
    b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Intent i=new Intent(Main2Activity.this,MainActivity.class);
              startActivity(i);
        }
    });
    Log.d(MainActivity.TAG,"Oncreate 2");

}

例如 如果我在第一个活动中设置了一个 EditText,并且如果我在其中有一些文本,那么在第二个活动和第一个活动之间切换时,我会丢失该文本。 bcoz onCreate 在第一个活动中被调用。 但是当我切换到横向模式时 onRestoreInstance 被调用并且我没有丢失任何文本。

【问题讨论】:

  • 请发布您的第一个Activity的代码。

标签: android android-activity


【解决方案1】:

据我所知,只有当您的活动将被销毁并再次创建时,才会调用 onRestoreInstance。因此,在这种情况下,您将恢复之前被破坏的活动状态。

但在您的情况下,活动并没有被破坏,它只是被系统停止了,所以它没有失去它的状态,所以不需要恢复它。

请查看以下链接了解更多详情:FIRSTSECOND

已编辑

由于您提供了活动的代码,正如我所见,您从第二个活动而不是第一个活动打开,而是从第一个活动类型的第三个活动打开。 因此,在第二个 Activity 中按下按钮后,您的堆栈跟踪将是:

MainActivity -> Main2Activity -> MainActivity。

所以你有两个简单的解决方案: 1) 代替

Intent i=new Intent(Main2Activity.this,MainActivity.class);
startActivity(i);

只要写finish();

2) 将标志 FLAG_ACTIVITY_CLEAR_TOP 添加到从 Main2Activity 到 MainActivity 的意图

【讨论】:

  • 哦。但是,如果我在第一个活动中使用 EditText,并且如果我在其中有一些文本,那么在第二个活动和第一个活动之间切换时,我会丢失该文本。 bcoz onCreate 被调用
  • @Prajwal 你能提供你的活动代码吗?
  • 确定我现在添加了
  • 谢谢,我已经更新了我的答案。简而言之,您不会返回创建 ThirdActivity 的第一个活动
  • 谢谢我得到了解决方案 :) 我不知道它会被视为第三个活动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多