2017-01-23 14 views
4

私は2つのアクティビティ(AとB)を持っています。ボタンをクリックすると、Aからの要素がBにアニメーション化された遷移を開始します。しかし、B共有要素の遷移をキャンセルする

この質問をする前に、私はインターネットを研究し、setSharedElementReturnTransition(transition)setSharedElementReenterTransition(transition)という2つの方法があることを発見しました。これらのメソッドは適切なアクティビティonCreate()で呼び出され、transition = nullのメソッドが動作しませんでした。

super.onBackPressed()の代わりにをonBackPressed()に呼び出しました。望ましい行動を達成するための他の方法はありますか?

要約すると、逆方向遷移をnullに設定すると、何も変更されませんでした。遷移はオーバーライドされません。

編集1.ここではコードです:XMLファイル(activity_Aとactivity_B)で

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(); 
    } 
} 

てい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

のみ必要/リターン(私の場合)設定ビューでnullに移行し、変更の移行名を再入力することであるfinish();

super.onBackPressed();を変更せずに、可能です。

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

その後、10
@Override 
public void onBackPressed() { 
    //TODO 
} 

OR

そして、あなたはActivityBを開始した後ActivityAを終了したい場合は
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

関連する問題