提问者:小点点

如何拯救一个activity国家?


我通过使用OnacitivityResult收到了该值。但是,当移动到另一个活动时,该值将被初始化。我想使用save instance State保存接收到的值。

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);
        }
    });

共2个答案

匿名用户

我不完全是这样,但通常您会重写onSaveInstanceState(Bundle savedInstanceState),并将您想要更改为Bundle的状态值写入

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("MyBoolean", true);
savedInstanceState.putDouble("myDouble", 1.9);
savedInstanceState.putInt("MyInt", 1);
savedInstanceState.putString("String", "Hi Android");
}

它将被传递到onCreate()和onRestoreInstanceState(),在那里您可以从activity接收值:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
boolean myBoolean = savedInstanceState.getBoolean("Boolean");
double myDouble = savedInstanceState.getDouble("Double");
int myInt = savedInstanceState.getInt("Int");
String myString = savedInstanceState.getString("String");
}

或片段:

    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
    double myDouble = savedInstanceState.getDouble("myDouble");
    int myInt = savedInstanceState.getInt("MyInt");
    String myString = savedInstanceState.getString("MyString");
    }

匿名用户

在大多数现代应用程序中,您将遵循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);
}