首页 > 解决方案 > 如何保存活动状态?

问题描述

我通过使用 onAcitivityResult 获得了价值。但是,当移动到另一个 Acitivity 时,这个值会被初始化。我想使用保存实例状态保存接收到的值。

private static final int TEMP_REQUEST_CODE=5;
protected void onActivityResult(int requestCode, int resultCode,  Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if(resultCode==RESULT_OK){
        Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(getApplicationContext(),"failure",Toast.LENGTH_SHORT).show();
    }

    if(requestCode==TEMP_REQUEST_CODE && resultCode== Activity.RESULT_OK){
        String HTempTxt=data.getStringExtra("valuehtemp");
        String LTempTxt=data.getStringExtra("valueltemp");
        LTempText=(TextView)findViewById(R.id.ltemp);
        HTempText=(TextView)findViewById(R.id.htemp);
        HTempText.setText(HTempTxt);
        LTempText.setText(LTempTxt);
    }
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_infostate);

TempButton=(ImageButton)findViewById(R.id.btn_temp);
LTempText=(TextView)findViewById(R.id.ltemp);
HTempText=(TextView)findViewById(R.id.htemp);

TempButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(),SettempActivity.class);
            startActivityForResult(intent,TEMP_REQUEST_CODE);
        }
    });

标签: androidandroid-activity

解决方案


在大多数现代应用程序中,您将遵循 MVP 或 MVVM 等设计模式,其中“模型”负责持久存储。该存储可以是存在于应用程序内存中、写入数据库或上传到服务器的东西。

在您的情况下,您可以通过将其存储在静态字段中来将其保存在应用程序内存中,并在初始化 Activity 时从中读取:

class TempData {
  final String hTemp, lTemp;
 
  TempData(String hTemp, String lTemp) {
    this.hTemp = hTemp;
    this.lTemp = lTemp;
  }

  //Copy constructor
  TempData(TempData data) {
    this(data.hTemp, data.lTemp);
  }
}
//Singleton
class TempDataRepo {

  private static TempDataRepo instance = null;
 
  static TempDataRepo instance() {
    if(instance == null)
      instance = new TempDataRepo();
    return instance;
  }

  private TempData cached;

  private TempDataRepo() {
    cached = null;
  }

  void write(TempData in) {
    cached = in;
  }

  @Nullable
  TempData read() { 
    return cached == null ? null : new TempData(cached);
  }
}
public class SomeActivity extends Activity {

  //onCreate...
  final TempData data = TempDataRepo.instance().read();
  if(data != null) {
    //apply it..
    ...setText(data.hTemp);
    ...setText(data.lTemp);
  }

  //onActivityResult...
  final String hTempTxt=data.getStringExtra("valuehtemp");
  final String lTempTxt=data.getStringExtra("valueltemp");
  final TempData data = new TempData(hTempText, lTempTxt);
  TempDataRepo.instance().write(new TempData(hTempText, lTempTxt);
}

推荐阅读