java - 在 Activity 切换期间保留 View 中的数据?

标签 java android eclipse view android-activity

在我的 Android 应用程序中,用户可以在 EditView 中输入文本,然后单击一个按钮,将他带到另一个 Activity ,在那里他可以选择一个联系人......然后按一个按钮, 让他回到第一个 Activity ...

现在的问题是我需要将选定的联系人传递给第一个 Activity 并显示它(我已经使用 bundle 完成了它),但我无法保留在 EditView 中已输入的文本...我应该这样做(但是应该保留文本,而不是将其通过 bundle 并将其返回)

谢谢:)

最佳答案

即使在软终止(用户更改手机方向)之后,操作系统也会自动保存 View 组件中的文本,但在硬终止之后,用户在父 Activity 处于焦点状态时按下后退按钮,则不会。因此,除非您正在执行一些非标准的操作,例如调用 onSaveInstanceState 而不调用 super.onSaveInstanceState,否则 View 状态中的数据应该持续存在。

一种解决方案是在启动子 Activity 之前将 View 组件中的文本保存为非 View 实例属性,并在焦点返回到 onActivityResult 方法中的父 Activity 时读取该值。

日航

编辑:Android Docs Activity页面已被广泛更新。如果小部件没有 ID,则不会保存 View 状态。

编辑:我的意思是 View 状态应该由操作系统保存。您不需要手动保存 View 状态。在硬终止时,如果这是 Activity 的预期行为,则需要保存 Activity 的状态。这是一些保存 Activity 状态的代码。给定一个实例变量:

String password;

这里我们保存软杀伤的状态:

   protected void onSaveInstanceState(Bundle outState){
        password= editTextPassword.getText().toString();
        outState.putString("password", password);
        super.onSaveInstanceState(outState); // save view state
    }

这里我们保存硬杀的状态

@Override
protected void onStop(){
   super.onStop();

  SharedPreferences prefs = getPreferences(MODE_PRIVATE);
  SharedPreferences.Editor editor = prefs.edit();
  editor.putString("password",password); 
  editor.commit();

这里我们在 onCreate(Bundle savingInstanceState) 中恢复状态:

if( savedInstanceState!= null){ // get saved state from soft kill after first pass
    try {
        password= savedInstanceState.getString("password");
        Log.d(TAG,"RestoredState!");
    }
    catch(Exception e){
        Log.d(TAG,"FailedToRestoreState",e);
    }
}
else { // get saved state from preferences on first pass
    SharedPreferences prefs = getPreferences(MODE_PRIVATE); // singleton
    if (prefs != null){
        this.password= prefs.getString("password","");    
        Log.d(TAG,"gettingPrefs");
    }
}
Log.d(TAG,"onCreate");

此外,如果调用 onSaveInstanceState,它将在 onStop 之前调用,如果您将 onResume 中的标志重置为:

protected void onResume() {
    super.onResume();
    Log.d(TAG,"onResume");
    isSavedInstanceState= false;
    isSavedPrefs= false;
}

在 onCreate 中设置标志不会产生预期的结果。

关于java - 在 Activity 切换期间保留 View 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124917/

相关文章:

java - 如何在标尺上添加标记?

java - 使用 java 代码执行 *nix find 命令

java - Android:发现蓝牙设备时出错

java - 解析JSON文件(JAVA)

java - 在Eclipse中运行mapreduce程序时出错

java - 循环遍历 2D 数组时 Android 构建崩溃 - libGDX

java - 使用 AntiSamy 进行 CSS 验证

java - 错误: cannot be resolved to a type

java - SOAP Web 服务读取超时

android - ProgressDialog Box虚拟计时器