2016-02-22 5 views
15

私は主に遷移でアクティビティーを開始するユースケースを持っていますが、これはナビゲーション・ドロワーから開くときには当てはまりません。私は、移行が行われたときに、私はいくつかのUIの更新をトリガするTransition.TransitionListenerを持ってスムーズな移行を維持するためにアクティビティが遷移なしで開始されているかどうかをどのように知ることができますか?

だから私はこのようなものがあります:

public class SomeActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState){ 
     // ... 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition(); 
      sharedElementEnterTransition.addListener(new Transition.TransitionListener() { 
       // ... 
       @Override 
       public void onTransitionEnd(Transition transition) { 
        doSomeUiUpdating(); 
       } 
      }); 
     } else { // Pre-Lollipop 
      doSomeUiUpdating(); 
     } 
    } 
} 

をアニメーションでの活動を開始するとき、これはうまく動作しますが、私はdoSomeUiUpdating()を呼び出すことができるように活動を移行せずに起動した場合は、どのように私が知っていることができますか?

私はActivityWindowTransitionまたは私が見落としているどこかに簡単な方法がなければならないと確信しています。アニメーションが表示されているかどうかを示すバンドルを設定するために、呼び出すアクティビティをリレーする必要はありません。

+0

あなたが持っているように、私は、その同じ論理をとるであろう(IF(android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.LOLLIPOP){doSomeUiUpdating(); ...)コードの前に、あなたは – Tasos

+0

と遷移はAPI 19(キットカット)で追加された活動を開始する必要がありますので、あなたはそれではないLOLLIPOP前にチェックする必要がある - https://www.youtube.com/watch?v=K3yMV5am-Xo – Tasos

+0

最初の行で言おうとすると、アクティビティ(Lollipop +であっても)は移行で最も頻繁に開始されますが、ユーザーがナビゲーション・ドロワーからアクティビティを開始するときはそうではありません。 –

答えて

4

onTransitionStartTransitionListenerに設定すると、ブール値の一部をisAnimationStartedに設定できます。

public class SomeActivity extends Activity { 

    private boolean isAnimationStarted = false; 

    public void onCreate(Bundle savedInstanceState) { 
     // ... 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition(); 
      sharedElementEnterTransition.addListener(new Transition.TransitionListener() { 
       // ... 
       @Override 
       public void onTransitionEnd(Transition transition) { 
        doSomeUiUpdating(); 
       } 

       @Override 
       public void onTransitionStarted(Transition transition) { 
        isAnimationStarted = true; 
       } 
      }); 
     } 
    } 

    public void onStart() { 
     if (!isAnimationStarted) { 
      doSomeUiUpdating(); 
     } 
    } 

} 
+0

ニースとシンプルなソリューション。 :) –

+0

しかし、これは可能性の問題を作成しません - コールバックが非同期実行を意味するので、それはアニメーションは、今後の場合でもonTransitionStartedが呼び出される前に、ONSTARTが呼び出されることは可能ではないでしょうか? – NeverwinterMoon

+1

実際には、私はちょうどそれをテストし、それは私が言ったように正確に - 私の場合、onStartは常にコールバックの前に呼ばれていたので、isAnimationStartedは常にそこにfalseだった。したがって、このメソッドは、アクティビティが遷移の有無にかかわらず開始されたかどうかを判断するのに役立ちません。 – NeverwinterMoon

関連する問題