首页 > 其他分享 >如何使用saveInstanceState保存活动状态?

如何使用saveInstanceState保存活动状态?

时间:2023-10-31 19:47:53浏览次数:31  
标签:mTextView myDouble 保存 Bundle savedInstanceState 活动状态 saveInstanceState onCreate 

内容来自 DOC https://q.houxu6.top/?s=如何使用saveInstanceState保存活动状态?

我已经在Android SDK平台上工作了一段时间,但是不太清楚如何保存应用程序的状态。因此,针对这个“Hello, Android”示例进行了一些微小的调整:

package com.android.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {

  private TextView mTextView = null;

  /\*\* Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mTextView = new TextView(this);

    if (savedInstanceState == null) {
       mTextView.setText("Welcome to HelloAndroid!");
    } else {
       mTextView.setText("Welcome back.");
    }

    setContentView(mTextView);
  }
}

我认为对于最简单的情况来说,这已经足够了,但是它总是响应第一条消息,无论我如何离开应用程序。

我确信解决方案非常简单,就像覆盖onPause方法或者类似的东西,但是我在文档中查找了大约30分钟,并没有发现任何明显的东西。


你需要重写onSaveInstanceState(Bundle savedInstanceState)方法,并将你想要更改的应用程序状态值写入Bundle参数,像这样:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // 将UI状态更改保存到savedInstanceState中。
  // 如果进程被杀死并重新启动,此bundle将被传递给onCreate。
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // 等等。
}

Bundle本质上是一种存储NVP(“名称-值对”)映射的方式,它将传递到onCreate()onRestoreInstanceState(),然后你可以从活动中像这样提取值:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // 从savedInstanceState中恢复UI状态。
  // 此bundle也已传递给onCreate。
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

或者从片段中。

@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    // 从savedInstanceState中恢复UI状态。
    // 此bundle也已传递给onCreate。
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
    double myDouble = savedInstanceState.getDouble("myDouble");
    int myInt = savedInstanceState.getInt("MyInt");
    String myString = savedInstanceState.getString("MyString");
}

你通常会使用这种技术来存储应用程序的实例值(选择、未保存的文本等)。

标签:mTextView,myDouble,保存,Bundle,savedInstanceState,活动状态,saveInstanceState,onCreate,
From: https://www.cnblogs.com/xiaomandujia/p/17801109.html

相关文章

  • vue 将html保存成pdf文件
    结合html2canvas和jspdf插件处理/*eslint-disable*///不使用JQuery版的importhtml2canvasfrom'html2canvas'importJsPDFfrom'jspdf'/***@paramele要生成pdf的DOM元素(容器)*@parampadfNamePDF文件生成后的文件名字**/exportfunc......
  • 练习:ip保存网页内容
    有一个存放ip的txt文本,通过读取文本内的所有ip,然后判断该ip的80端口上面有没有部署网站,如果有,就把这个网站首页的内容写入文本首次理解1、读取文本内所有ip2、读取出来的ip拼接下80端口,再通过200状态码判断,存在就写入内容到txt中importrequests#从文本中获取ip地址with......
  • 生成算式并将他永久的保存到文件中
    packageupdate;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.PrintStream;importjava.util.Scanner;publicclasscomplex{publicstaticvoidmain(Stringargs[])throwsIOException{......
  • 临时保存
    %Exampleofuseofoxmathproblemslatexclassforproblemsheets%\documentclass{oxmathproblems}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%UniversityofOxford,MathematicalInstituteLaTeXProblemSheetclass%Createdby......
  • 工作中遇到的坑:pg数据库保存时间[2023-10-10T01:12:32:910.345343]自动抹零
    今天数据入库的时候遇到了一个小问题。问题postrgrepSQL数据库中存储2023-10-10T01:12:32:910.345343类型的数据,数据库使用timestamp类型,存储完成后,会变成2023-10-1001:12:32.91自动将0抹掉解决方案使用TO_CHAR:数据库数据SELECT*FROMtest执行结果SELECTname,age,TO_CHAR(inp......
  • python博客园下载所有文章保存为Mardown
    简易代码importrequestsfrombs4importBeautifulSoupimportreimporthtml2textimportossession=requests.session()cookies={#换成自己的cookies}headers={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/av......
  • 爬取b站全站视频榜单保存到mysql
    爬取b站视频的全站板块的排行榜单提取出标题,地址,评论数量等等并且写入到mysql需要用到这四个库importrequestsimportjsonfromsqlalchemyimportcreate_engineimportpandas最后效果点赞分享视频公众号回复 b站全站榜单 获取源代码打开网站https://www.bilibili.com/v/popu......
  • [全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)
    源码位置:/Lib/zipfile.py/ZipFile/_extract_member/zipfile.py或者直接点击extract函数.在使用python解压缩zip文件时,由于需要在解压时重命名文件为我想要的格式,而不巧的是,zipfile包官方源代码没有这个功能...于是,在百度之后,果断放弃寻找现成代码的想法.在研究了一......
  • 如果 jumpserver 堡垒机中连不上之前保存能连接的服务器了怎么办
    如果这期间曾经修改过密码,请删除该服务器主机已关联的用户信息,重新添加用户,里面的用户凭据不会通过用户自动同步另外如果主机有其它安全服务保护,请注意是否因为堡垒机尝试错误次数过多导致ip被封,需要手动解封ip!参考:https://blog.csdn.net/weixin_42672685/article/details/11......
  • 使用JpaRepository的save方法执行成功,数据库却没有保存
    使用JpaRepository的save方法执行成功,数据库却没有保存可能是和事务有关的,这里用JpaRepository的flush方法,就可以了@TestvoidtestUserRespositorySave(){Useruser=newUser("小明","123456",18);userRespository.save(user);userRespository.flush();}原......