Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动切换期间是否在视图中保留数据?_Java_Android_Eclipse_View_Android Activity - Fatal编程技术网

Java 在活动切换期间是否在视图中保留数据?

Java 在活动切换期间是否在视图中保留数据?,java,android,eclipse,view,android-activity,Java,Android,Eclipse,View,Android Activity,在我的android应用程序中,用户可以在EditView中输入文本,然后单击一个按钮,将他带到另一个活动,在那里他可以选择联系人。。。然后按下一个按钮 让他回到第一个活动 现在的问题是,我需要将所选联系人传递给第一个活动并显示它(我使用捆绑包完成了此操作),但我无法在EditView中保留已输入的文本。。。我应该这样做(但是文本应该被保留,而不通过包传递并取回) 谢谢:)操作系统会自动保存视图组件中的文本,即使在软终止后(用户更改了手机方向),但在硬终止后,用户会在父活动处于焦点时点击后退按钮

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

现在的问题是,我需要将所选联系人传递给第一个活动并显示它(我使用捆绑包完成了此操作),但我无法在EditView中保留已输入的文本。。。我应该这样做(但是文本应该被保留,而不通过包传递并取回)


谢谢:)

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

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

日航

编辑:该页面已广泛更新。如果小部件没有ID,则不会保存视图状态

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

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 savedInstanceState)中恢复状态:

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

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

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

如何将视图组件中的文本保存为非视图即时属性…您能否给我一些示例:)@kAnNaN我编辑了我的答案以显示一些代码。希望有帮助。
protected void onResume() {
    super.onResume();
    Log.d(TAG,"onResume");
    isSavedInstanceState= false;
    isSavedPrefs= false;
}