Android - постоянный экземпляр активности - PullRequest
0 голосов
/ 14 октября 2011

Я использую экземпляры двух активаций (A и B) среди моего приложения. Сейчас я сталкиваюсь с проблемой сохранения каждого из них. Когда я использую sharedpreferences, я могу получить только сохранение A.class и B.class с SharedPreferences, но когда я использую экземпляр A снова. Это постоянное состояние в SharedPreferences переопределяется. Я думаю, я должен использовать Bundle с onSavedInstanceState и onRestoredInstanceState. Но как передать сохраненный Bundle в onCreate ()? Цель состоит в том, чтобы иметь возможность сохранять экземпляры активности.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 октября 2011

Вам необходимо учитывать, в каком состоянии вы должны сохраняться.

Например;

  • , какие флажки отмечены?
  • на каком уровне находится пользователь?
  • какова позиция их курсора

В качестве примера я только что закончил приложение, в котором пользователь может просматривать карточки разных уровней.

Меня волнуето;

  • на какой уровень карты они смотрят (возможно, они на уровне 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);
};
0 голосов
/ 14 октября 2011

При запуске действия A. Вы можете использовать intent.putExtra( String name, Bundle value ) для передачи пакета в ваше действие, а затем в onCreate упражнения A используйте getIntent.getBundleExtra( String name ), чтобы получить свой пакет снова.

...