Сохранение данных при изменении ориентации

Я поставил условие в методе onCreate(), чтобы проверить, существуют ли какие-то предыдущие данные или нет. Но это не работает. пожалуйста, направьте меня. И я не хочу использовать метод onRestoreSavedState() для этого.d

public class ActivityOne extends Activity {

Используйте их как ключи, когда вы сохраняете состояние между реконфигурациями.

private static final String RESTART_KEY = "restart";
private static final String RESUME_KEY = "resume";
private static final String START_KEY = "start";
private static final String CREATE_KEY = "create";

Строка для документации LogCat

private final static String TAG = "Lab-ActivityOne";
private int mCreate=0, mRestart=0, mStart=0, mResume=0;

Вам нужно будет увеличивать значения этих переменных при вызове соответствующих им методов жизненного цикла.

TODO: создайте переменные для каждого из TextView.

private TextView mTvCreate, mTvRestart, mTvStart, mTvResume;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_one);

TODO: назначьте соответствующие TextView переменным TextView

    mTvCreate=(TextView)findViewById(R.id.create);
    mTvRestart=(TextView)findViewById(R.id.restart);
    mTvResume=(TextView)findViewById(R.id.resume);
    mTvStart=(TextView)findViewById(R.id.start);


    Button launchActivityTwoButton = (Button) findViewById(R.id.bLaunchActivityTwo);
    launchActivityTwoButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

           Intent intent=null;
            intent = new Intent(v.getContext(),ActivityTwo.class);
        startActivity(intent);

        }
    });
    if(savedInstanceState!=null){
        mCreate=savedInstanceState.getInt(String.valueOf(mCreate));
        mRestart=savedInstanceState.getInt(String.valueOf(mRestart));
        mResume=savedInstanceState.getInt(String.valueOf(mResume));
        mStart=savedInstanceState.getInt(String.valueOf(mStart));
    }


    // Emit LogCat message
    Log.i(TAG, "Entered the onCreate() method");
        mCreate++;
        displayCounts();
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

Сохранение информации о состоянии с набором пар ключ-значение 4 строки кода, по одной на каждую переменную счетчика super.onSaveInstanceState(savedInstanceState);

    savedInstanceState.putInt(String.valueOf(mCreate),mCreate);
    savedInstanceState.putInt(String.valueOf(mRestart),mRestart);
    savedInstanceState.putInt(String.valueOf(mResume),mResume);
    savedInstanceState.putInt(String.valueOf(mStart),mStart);

}

Обновляет отображаемые счетчики Этот метод предполагает, что счетчики и переменные TextView используют имена, указанные выше public void displayCounts() {

    mTvCreate.setText("onCreate() calls: " + mCreate);
    mTvStart.setText("onStart() calls: " + mStart);
    mTvResume.setText("onResume() calls: " + mResume);
    mTvRestart.setText("onRestart() calls: " + mRestart);

}

}


person Rohan Chauhan    schedule 23.05.2015    source источник


Ответы (1)


Похоже, проблема в том, что вы пытаетесь использовать значения, которые еще не были установлены, когда пытаетесь зафиксировать сохраненное значение.

Все, что вам нужно сделать, чтобы исправить это, — это использовать константы String, которые вы определили.

Итак, в onCreate() у вас будет:

if(savedInstanceState!=null){
    mCreate=savedInstanceState.getInt(CREATE_KEY);
    mRestart=savedInstanceState.getInt(RESTART_KEY);
    mResume=savedInstanceState.getInt(RESUME_KEY);
    mStart=savedInstanceState.getInt(START_KEY);
}

Тогда в onSaveInstanceState() у вас будет:

savedInstanceState.putInt(CREATE_KEY,mCreate);
savedInstanceState.putInt(RESTART_KEY,mRestart);
savedInstanceState.putInt(RESUME_KEY,mResume);
savedInstanceState.putInt(START_KEY,mStart);
person Daniel Nugent    schedule 23.05.2015