Android使用数据维护活动状态

时间:2015-02-16 11:26:45

标签: android android-activity android-fragments

我有两种不同的活动。 MainActivity ContactList &的 ContactDetails 即可。现在,从MainActivity用户将点击Add new,应用程序将打开ContactList屏幕,用户可以从中选择任何联系人以查看打开ContactDetails活动的详细信息。现在,如果用户选择任何否。从ContactDetails,应用程序将返回MainActivity并添加选定的否。在arraylist。我能够添加数据但我的问题是每当添加新记录旧记录被删除。我发现evertime的原因是我从ContactDetails打开MainActivity 它会创建新的Activity 。所以我正在寻找一种方法来使用 OnResume OnResult 方法来解决问题。

在ContactDetails中

  

Intent intent = new Intent(getBaseContext(),MainActivity.class);   intent.putExtra(“CONTACT_NO”,CONTACT_NO); startActivity(意图)

在MainActivity OnResume方法

  

String data = getIntent()。getExtras()。getString(“keyName”);

     

arr.add(数据);

2 个答案:

答案 0 :(得分:0)

如果您希望在活动的整个生命周期内保留数据,SharefPreferences将为您提供良好的服务。一个例子:

写(onPause / onDestroy):

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

阅读(onResume / onCreate):

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

了解更多here

<强>更新

或者,您可以使用onSavedInstanceState。例如:

保存状态:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

恢复状态:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first

    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}

有关管理活动状态here的更多信息。

答案 1 :(得分:0)

从MainActivity.java中获取列表的位置,将其作为公共静态ArrayList或String数组,并且不要在MainActivity.java中初始化它。

此外,如果您没有为MainActivity调用finish()(转到ContactListActivity.java),则将新数据添加到onResume()中的arraylist中。但请记住要检查 - 是否有新数据要添加,因为这是第一次没有数据要添加(根据您发布的问题)。