android - 如何保存活动状态?
问题描述
我通过使用 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);
}
});
解决方案
在大多数现代应用程序中,您将遵循 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);
}
推荐阅读
- javascript - 元素刷新后的JQuery事件不起作用
- apache-flink - 如何阻止高负载导致级联 Flink 检查点故障
- java - 无法为 Java EE 安装 Eclipse
- python - 为作为输入发送的文本设置颜色
- c++ - 重载 operator< 不适用于 claas 的指针
- reactjs - 我如何运行反应原生项目
- css - Z-index 不适用于绝对定位元素(尽管移除了不透明度等)
- reactjs - 当我在 App 组件上使用 setState() 时,将 Context API 与 react-native-router-flux 一起使用会重置堆栈
- wordpress - Wordpress JSON API 仅在登录时工作
- javascript - 数据表日期排序与日期显示