2017-01-23 8 views
4

У меня есть два вида действий (A и B), и когда я нажимаю кнопку, элемент из A начинается анимированный переход на B. Однако я хочу отключить этот же переход, играющий назад при возвращении из B к A.Отмена перехода общего элемента

Прежде чем задать этот вопрос, я исследовал в Интернете и обнаружил, что существует два метода: setSharedElementReturnTransition(transition) и setSharedElementReenterTransition(transition). Эти методы вызываются в соответствующих действиях onCreate() метод с transition = null, и это не сработало.

Только решение, которое я искал, для отмены перехода, было направлено finish() в onBackPressed() вместо super.onBackPressed(). Есть ли другой способ достижения желаемого поведения?

Подводя итог, когда я устанавливал обратные переходы к нулю, ничего не менялось - переход не был отменен.

Edit 1. Вот код:

ActivtyA.java

public class ActivityA { 

    ... 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_A); 
      } 

    ... 

      @Override 
      public void onPersonalProfileEditIconClicked() { 
       Intent intent = new Intent(ActivityA.this, ActivityB.class); 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 

         View sharedView = avatarView; 

         String sharedElementName = getString(R.string.profile_avatar); 
         ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation 
           (ActivityA.this, sharedView, sharedElementName); 
         startActivity(intent, transitionActivityOptions.toBundle()); 
       } else startActivity(intent); 
      } 
} 

ActivityB.java

public class ActivityB { 

    ... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_B); 
    } 

    ... 

    @Override 
    public void onBackPressed() { 
     finish(); 
    } 
} 

В файлах XML (activity_A и activity_B) SharedView есть свойство transitionName.

themes.xml

<resources> 
    <style name="theme" parent="Theme.AppCompat.Light.NoActionBar"> 
     ... 
     <item name="android:windowActionModeOverlay">true</item> 
     <item name="android:windowContentTransitions">true</item> 
    </style> 
</resources> 
+1

Я также сталкиваюсь с таким же вопросом и для меня, что я сделал 'послевкусие()' в 'onBackPressed()' – AJay

+1

Пожалуйста, поделитесь кодом –

+0

@AJay спасибо за ответ. Я уже это сделал, но это не решение. –

ответ

1

После обновления библиотеки поддержки отмены общего перехода элемента можно, не меняя super.onBackPressed(); к finish();

Только вам нужно, чтобы установить (в моем случае) возврата/повторно перехода к Null и имя перехода изменения на ваш взгляд.

getWindow().setSharedElementReturnTransition(null); getWindow().setSharedElementReenterTransition(null); view.setTransitionName(null);

0

Вы можете получить желаемый выход, используя код ниже: ActivityA.java

private void startActivityB(){ 
    startActivity(new Intent(ActivityA.this, ActivityB.class)); 
    overridePendingTransition(R.anim.slide_left_to_right, R.anim.slide_right_to_left); 
    } 

Нет необходимости писать дополнительный код ActivityB.java

@Override 
public void onBackPressed() { 
    //TODO 
} 

ИЛИ

И если вы хотите, чтобы закончить ActivityA после начала ActivityB затем
ActivityA.java

private void startActivityB(){ 
     startActivity(new Intent(this, ActivityB.class)); 
     overridePendingTransition(R.anim.slide_left_to_right, R.anim.slide_right_to_left); 
     finish(); 
} 

ActivityB.java

@Override 
public void onBackPressed() { 
    startActivity(new Intent(ActivityB.this, ActivityA.class)); 
    overridePendingTransition(R.anim.slide_right_to_left, R.anim.slide_left_to_right); 
    finish(); 
} 
+0

Я обновил вопрос. Спасибо за ответ –

+2

overridePendingTransition не является частью структуры перехода и не имеет ничего общего с переходами общих элементов, к которым относится вопрос OP – knezmilos

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

  • Нет связанных вопросов^_^