Как завершить действие после завершения перехода Android

я хочу завершить предыдущее действие после завершения перехода между двумя действиями

я пробовал ActivityCompat.finishAfterTransition(this);, но на самом деле он завершает действие до завершения перехода

я просмотрел это решение раньше, но не смог поймите ответ на него, было бы здорово, если бы кто-то мог объяснить, как завершить действие после завершения перехода

Обновления:

я только что попытался начать следующее действие, подобное этому

Intent intent = new Intent(LoginActivity.this, TaskActivity.class);
                    startActivity(intent);

код onStop будет активирован, но когда я использую это

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this);
                Intent intent = new Intent(LoginActivity.this, TaskActivity.class);
                startActivity(intent,options.toBundle());

onStop не будет активирован, поэтому я должен активировать его вручную, и если да, то рекомендуется


person Annonymous177    schedule 29.10.2016    source источник
comment
используйте 1_ ?   -  person Donald Wu    schedule 29.10.2016
comment
я бы хотел, но это дает мерцание, и если я закончу действие при следующем действии, оно покажет анимацию окончания   -  person Annonymous177    schedule 29.10.2016
comment
вы ищете overridePendingTransition? Насколько я понимаю ваш вопрос, это в значительной степени то, чего вы хотите достичь   -  person Droidman    schedule 29.10.2016
comment
@Droidman нет, совсем не то, что я сейчас делаю, это экран входа в систему, а затем, когда вход в систему успешен, он переходит в основное действие, но это не имеет смысла, если пользователь может просто нажать кнопку «Назад» и вернуться к экрану входа.   -  person Annonymous177    schedule 29.10.2016
comment
и из того, что я знаю из чтения страницы разработчика Android, действие будет остановлено, когда пользователь изменит действие, поэтому один stackoverflow.com/questions/29547439/ говорят, что нужно выполнить finish() при остановке, но это не очень хорошее решение, поскольку телефонный звонок также вызовет код on Stop()   -  person Annonymous177    schedule 29.10.2016
comment
@Annonymous177 the user can just press the back button and go back to the login screen - вы можете предотвратить такое поведение, используя флаги Intent или объявив noHistory в манифесте. Вы найдете массу примеров, когда найдите его   -  person Droidman    schedule 29.10.2016


Ответы (3)


Я только что поделился своим ответом здесь. Используйте 1_

person ahmed_khan_89    schedule 11.07.2017

Ответ в предоставленной вами ссылке предлагает создать переменную в верхней части вашей деятельности.

Boolean mShouldFinish = false;

Затем, после того как вы начнете переход к следующему действию (после startActivity(ctx,intent, bundle)) добавьте:

mShouldFinish = true;

И добавьте переопределение метода onStop с помощью:

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}
person Elias N    schedule 29.10.2016
comment
я пробовал этот метод, но кажется, что он не работает, так как переход не завершился, даже если if(mShouldFinish) не было истинным - person Annonymous177; 29.10.2016
comment
Это не работает, когда вы начинаете Activity с onActivityResult - person Rafael Ruiz Muñoz; 28.01.2019

Ребята нашли решение этой проблемы, вместо этого используйте этот код для перехода

if (Build.VERSION.SDK_INT >= 21) {
                    TransitionInflater inflater = TransitionInflater.from(LoginActivity.this);
                    Transition transition = inflater.inflateTransition(R.transition.fade_transition);
                    TransisitonTime = transition.getDuration()*2;
                    getWindow().setExitTransition(transition);
                }

                ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this);

я использовал это вместо

overridePendingTransition(R.animator.fade_in,
                        R.animator.fade_out);

с этими xml-файлами

fade_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="2000"/>
</set>

fade_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="2000"/>
</set>

таким образом, я могу сделать переход постепенного появления и исчезновения, когда вызывается finish()

спасибо @Droidman за то, что указал мне правильное направление

person Annonymous177    schedule 29.10.2016