2016-02-22 27 views
15

Çoğunlukla geçişli bir etkinlik başlattığım bir kullanım durumum var, ancak bu, onu gezinme çekmecesinden açarken durum böyle değil.Bir etkinlik geçiş olmadan başlatılırsa nasıl bilinir?

Geçişin düzgün olmasını sağlamak için Transition.TransitionListener numaralı bir geçişe sahibim. Geçiş yapıldığında bazı UI güncelleştirmelerini tetikliyorum.

animasyon ile Aktivite başlatırken Bu iyi çalışıyor
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(); 
     } 
    } 
} 

ancak Etkinlik bir geçiş olmadan başlatıldı olmadığını bilmek nasıl ben doSomeUiUpdating() çağrı böylece:

Yani böyle bir şey var?

Ben Activity, Window, Transition ya da ben gözardı yerde basit bir yöntem olmalıdır eminim. Animasyonun gösterilip gösterilmediğini söyleyen bir paket ayarlamak için arama aktivitesini aktarmak istemiyorum.

+0

Sendeki onun aynı mantık üstlenecek (if (android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.LOLLIPOP) {doSomeUiUpdating(); ....) koddan önce – Tasos

+0

numaralı bir faaliyeti başlatmanız ve API 19'a (KITKAT) geçişler eklendiğinden önce LOLLIPOP - https://www.youtube.com/watch?v=K3yMV5am-Xo – Tasos

+0

şey şu ki - ilk satırda söylemeye çalıştığım gibi - etkinlik (Lollipop + 'da olsa bile) en çok geçişle başlatılır, ancak kullanıcı bu etkinliği gezinme çekmecesinden başlattığında değil. –

cevap

4

Bazı boole isAnimationStarted'u ayarlamak için TransitionListeneronTransitionStart'u deneyebilirsiniz.

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

Güzel ve basit bir çözüm. :) –

+0

Ancak bu olası bir sorun yaratmaz - geri arama bir uyumsuz yürütme gerektirdiği için, animasyon yaklaşıyor olsa bile, onStart onTransitionStarted çağrılmadan önce çağrılacak mıdır? – NeverwinterMoon

+1

Aslında, sadece test ettim ve aynen söylediğim gibi - benim durumumda, onStart her zaman geri aramalardan önce çağrıldı, yaniAnimationStarted her zaman orada yanlıştı.Bu nedenle, bu yöntem faaliyetin geçiş ile/geçiş olmadan başlatılıp başlatılmadığını belirlemeye kesinlikle yardımcı olmaz. – NeverwinterMoon

İlgili konular