Search code examples
javaandroiddata-persistence

Best to way to implement data persistence when orientation changes in android?


Basically what the title says. Currently if the orientation changes in my app the ball resets back to the top of the game, however I wish to change my code so that if the user changes orientation of the device the ball and racket stay in the same spot. How would I achieve this? Would I place my entire in these two methods?

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);
Log.v(TAG,  "onSaveInstanceState");
}

and

protected void onRestoreInstanceState(Bundle savedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);
Log.v(TAG,  "onRestoreInstanceState");
}

(note I have already initialized the constants for TAG, within my code not seen here).
(it's also an activity)


Solution

  • You could the save the position of the ball and racket in the outstate so in the activity:

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    
        //If it is an integer
        outState.putInt(TAG, mBallPosition);
    
        //Or use a serializable if you wish to store an actual object
       outState.putSerializable(TAG, mBallPosition);
    }
    

    Then in your onCreate method you can restore the states :

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        if (savedInstanceState != null) {
            int position = savedInstanceState.getInt(TAG,0);
            //set ball position
    
            //or get the object back using outstate.getSerializable(TAG) 
    
        }
    }