Android如何保存一个activity页面到历史记录?

如何保存一个activity,创建历史记录?也就是说,保存创建过的activity的ui页面,然后通过历史记录可以再次看到过去的activity。有方法吗?

File==>local history

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/596
  • 你也可以参考下这篇文章:Activity在后台销毁的时候,如何保存和恢复状态还有数据
  • 除此之外, 这篇博客: Android安卓 按返回键时将activity的数据传递给另一个activity中的 方法一:重写返回键方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • public boolean onKeyDown(int keyCode, KeyEvent event){
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
            {
         这里写自己的操作,此方法兼容Android 1.0到Android 2.1
     }
        }
    

    我这里的代码:
    //注:Intent黄色因为我在搜索Intent。backIntent有下划线是我重复定义了两次,当时写的时候小失误,后面已更正。
    在这里插入图片描述
    乍一看,这里的代码好像就可以实现功能了。但是实际上运行的时候,并不能达到想要的效果,点击返回时,不但没有保存我在当前activity已经输入的数据,而且还将我的mainactivity给重置为了初始状态。
    问题出在哪里呢?问题在于我这里少写了一句话,又多写了一句话。
    少写的代码:setResult(RESULT_OK,backIntent);将这句代码加入到最后一行。

    该方法的原型:setResult(int resultCode, Intent data)
    第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK该值默认为-1。
    第二个参数:一个Intent对象,返回给主Activity的数据。在intent对象携带了要返回的数据,使用putExtra( )方法。

    加入这句话后,成功实现事件。点击返回键,成功保存数据。直到这里我才得到了启发:实际上我们需要做的事就是,给返回键添加一个相当于确定键的功能。点击返回键,相当于点击了确定键。

    确定键的部分代码如下:
    在这里插入图片描述
    我只需要给返回键添加与确定键一样的返回值,就可以实现事件。点击确定键返回RESULT_OK,即resultCode==RESULT_OK。所以我给上面的代码添加了setResult(RESULT_OK,backIntent);之后,返回键的返回值就跟确定键的返回值一样了。

    多的一句话是startActivity(backIntent);
    为什么呢?
    我们知道,activity的调用实际上在内存中是一个压栈的过程,调用一个activity就压一次栈。
    以这个代码为例,这个app有两个activity:
    在这里插入图片描述
    启动app,首先调用的是LifePriceMainActivity,将该Activity压栈,随后我们通过事件(在这不特别指出调用事件的代码,这不是我们的重点)调用了GoodEditActivity,此时压栈GoodEditActivity。

    所以我们不需要为返回键添加startActivity方法,因为点击返回键,GoodEditActivity出栈,LifePriceMainActivity回到栈顶,也就是此时显示的是LifePriceMainActivity,所以调用这个方法是多此一举的,删掉删掉。

    完整代码:

        @Override
    //    重写物理返回键方法
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if(keyCode == KeyEvent.KEYCODE_BACK){
                String back_name=((EditText)findViewById(R.id.edit_text_good_name)).getText().toString();
                String back_price=((EditText)findViewById(R.id.edit_text_good_price)).getText().toString();
    
                Intent backIntent = new Intent(GoodEditActivity.this,LifePriceMainActivity.class);
                Bundle back_bundle = new Bundle();
                back_bundle.putCharSequence("back_name",back_name);
                back_bundle.putCharSequence("back_price",back_price);
                backIntent.putExtras(back_bundle);
                setResult(RESULT_OK,backIntent);
                GoodEditActivity.this.finish();
            }
            return super.onKeyDown(keyCode,event);
        }
    }
    

还是用fragment吧 ui页面无法保存啊