Android - 持久活动实例

时间:2011-10-14 09:43:23

标签: android android-activity persistence instance

我在我的应用程序中使用了两个活动(A和B)的实例。现在我面临着坚持每个人的问题。当我使用sharedpreferences时,我只能使用SharedPreferences持久化A.class和B.class,但是当我再次使用实例A时。它覆盖了SharedPreferences中的持久状态。我想,我应该使用onSavedInstanceState和onRestoredInstanceState的Bundle。但是如何将保存的Bundle传递给onCreate()?目标是能够持久保存活动实例。

由于

2 个答案:

答案 0 :(得分:0)

启动活动A.您可以使用intent.putExtra( String name, Bundle value )将捆绑包传递给您的活动,然后在活动A的onCreate中使用getIntent.getBundleExtra( String name )再次获取您的捆绑包。

答案 1 :(得分:0)

你需要考虑你需要坚持的状态。

例如;

  • 哪个复选框已勾选?
  • 用户在什么级别?
  • 光标位置是什么

举个例子, 我刚刚完成了一个应用程序,用户可以在其中查看不同级别的抽认卡。

我关心;

  • 他们正在查看哪种级别的闪卡(可能是他们在2级)
  • 他们正在看哪张牌(也许他们在第4张牌上)

这是代码。

// a variable to store the level
private final static String CARD_LEVEL_STATE = "currentCardLevel";

// a variable to store the current card
private final static String CURRENT_CARD_STATE = "currentCardNumber";

@Override
protected void onSaveInstanceState(Bundle outState) {
  // save the level
  outState.putInt(CARD_LEVEL_STATE,   flashCardList.currentLevel());
  // save the current card
  outState.putInt(CURRENT_CARD_STATE, flashCardList.currentCardNumber());
  // do the default stuff
  super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
  // ignore if we have no saved state
  if (savedInstanceState != null) {
    // record the level
    if (savedInstanceState.containsKey(CARD_LEVEL_STATE)) {
      int currentCardLevel = savedInstanceState.getInt(CARD_LEVEL_STATE);
      flashCardList.setCardLevel(currentCardLevel);
    }
    // recover the current card
    if (savedInstanceState.containsKey(CURRENT_CARD_STATE)) {
      int currentCardNumber = savedInstanceState.getInt(CURRENT_CARD_STATE);
      flashCardList.setCurrentCardNumber(currentCardNumber);
    }
    // refresh the view
    refreshCard();
  }
  super.onRestoreInstanceState(savedInstanceState);
};