1

Итак, у меня есть это действие с помощью метода doSomething(). Этот метод следует вызывать, когда пользователь покидает действие и возобновляет его через некоторое время. Этот код работает отлично. Проблема заключается в следующем: когда пользователь поворачивает телефон (изменение ориентации), метод также вызывается. Я не хочу, чтобы этот метод вызывался при изменении ориентации. Вот мой код деятельностиОбработка изменений вращения и действия пользователя, покидающих объект

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(); 
    } 

} 

Заранее благодарен!

ответ

1

Из API 13 вы можете использовать configChanges в манифесте.

Добавить в манифест следующего содержания. Это предотвращает воссоздание активности на экране:

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

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

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);   
    } 
} 
+2

Только добавление этой строки в манифест не помогло. Но это помогло. Я также добавил, если (! IsChangingConfigurations()) callMethod = true; , и теперь он отлично работает. благодаря –

1

Я вижу в своем комментарии, что вы добавили isChangingConfigurations() флаг, который должен сделать трюк, но вы должны сохраняться это состояние, а не делать это статическая переменная. В противном случае, если ваш процесс будет убит, когда ваше приложение перейдет на задний план, вы потеряете это состояние.

public class MainActivity extends AppCompatActivity { 
    private static final String KEY_CALL_METHOD = "key_call_method"; 

    private boolean callMethod = true; 

    @Override 
    protected void onCreate(Bundle savedState) { 
     super.onCreate(savedState); 
     setContentView(R.layout.activity_main); 

     if (savedState != null) { 
      callMethod = savedState.getBoolean(KEY_CALL_METHOD); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (callMethod) { 
      doSomething(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (!isChangingConfigurations()) { 
      callMethod = true; 
     } 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(KEY_CALL_METHOD, callMethod); 
    } 

    private void doSomething() { 
     Log.i("doSomething()", "Did something."); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^