2016-02-22 3 views
15

У меня есть прецедент, в котором я в основном запускаю операцию с переходом, но это не тот случай, когда вы открываете ее из навигационного ящика.Как узнать, запущена ли деятельность без перехода?

Чтобы сохранить плавный переход, у меня есть 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()?

Я уверен, что должен быть простой метод в Activity, Window, Transition или где-то, что я упускается. Я не хочу ретранслировать на вызывающую активность, чтобы установить некоторый пакет, который говорит, показывает ли анимация или нет.

+0

я буду взять на себя ту же логику, как у вас есть (если (android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.LOLLIPOP) {doSomeUiUpdating(); ....) перед кодом вы должны начать деятельность – Tasos

+0

, а переходы были добавлены в API 19 (KITKAT), поэтому вам нужно проверить до этого не LOLLIPOP - https://www.youtube.com/watch?v=K3yMV5am-Xo – Tasos

+0

Дело в том, что, как я пытаюсь сказать в первой строке, активность (даже на Lollipop +) чаще всего начинается с перехода, но не тогда, когда пользователь запускает активность из навигационного ящика. –

ответ

4

Вы можете попробовать onTransitionStart из TransitionListener, чтобы установить некоторый boolean 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

Но не создаст ли это возможную проблему - потому что обратный вызов подразумевает выполнение асинхронного вызова, разве не возможно, что даже если анимация будет наступающей, будет вызываться onStart до вызова onTransitionStarted? – NeverwinterMoon

+1

Фактически, я только что протестировал его, и это было точно так же, как я сказал - в моем случае onStart всегда вызывался перед любым обратным вызовом, поэтому isAnimationStarted всегда был там ложным.Таким образом, этот метод, конечно, не помогает определить, была ли эта активность запущена с/без перехода. – NeverwinterMoon

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