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

マニフェストにその行を追加しても機能しませんでした。しかしそれは助けになった。私もif(!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."); 
    } 
} 
関連する問題