2011-02-26 40 views
0

在我的Android应用程序,用户可以输入在EditView中的文本和上一个按钮,带他到其他活动,他可以选择一个联系人,点击...,然后按下一个按钮, 带来他回到第一活动...在活动切换期间保留视图中的数据?

现在的问题是我需要通过选定的联系人的第一个活动,并显示它(我还用包做了),但我无法保留在EditView中已经输入的文本.. 。这是我应该做的(但文本应与出通过它通过捆绑并获得回被保留)

谢谢:)

回答

1

的在视图组件文本是自动由OS保存,甚至是杀软后(用户更改手机方向),而不是硬杀伤后,用户点击后退按钮,同时父活动成为关注焦点。所以,除非你在做非标准的事情,比如在不调用super.onSaveInstanceState的情况下调用onSaveInstanceState,那么视图状态中的数据应该保持不变。

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

JAL

编辑:Android Docs Activity页面已经被广泛地更新。如果小部件没有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):

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

此外鉴于IF的onSaveInstanceState被称为会的onStop之前调用,也可以使用标志isSavedInstanceState和isSavedPreferences写首选项仅在硬杀伤,如果你的onResume复位标志为:

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

设定的onCreate标志不会产生期望的结果。

+0

如何在视图组件中的文本保存为一个非视图即时财产...ü可以给我一些例子请:) – kAnNaN 2011-02-26 12:49:17

+0

@kAnNaN我编辑我的回答表现出一定的代码。希望有所帮助。 – JAL 2011-02-26 21:29:17