Search code examples
androidandroid-activityscreen-orientationscreen-rotation

Handling rotation changes and user leaving activity


So I’ve got this Activity with a doSomething() method. This method must be called when the user leaves the Activity and resumes after a while. This code works fine. The problem is: When the user rotates the phone (orientation change), the method is also called. I don’t want the method to be called on Orientation Change. Here’s my Activity code

public class MainActivity extends AppCompatActivity
{
  private static boolean callMethod=true;
  @Override
    protected void onResume() {
        super.onResume();
        if(callMethod)
           doSomething();
    }
    @Override
    protected void onPause() {
        super.onPause();
        callMethod=true;
    }

private void doSomething()
{
    Log.i(“doSomething()”,”Did something.”);
}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
        if(callMethod)
          doSomething();
    }

}

Thanks in advance!


Solution

  • From API 13 you can use configChanges in manifest.

    Add the following to the manifest. This prevents recreation of the activity on screen rotation:

    <activity android:name=".Activity_name"
    android:configChanges="orientation|keyboardHidden">
    

    One note is after this, you should handle screen orientation change yourself. you should override the following function in your activity for that:

     public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
            setContentView(R.layout.layout_landscape);
        }
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            setContentView(R.layout.layout);         
        }
    }