4

私は現在ImageView、同じアクティビティであるフラグメントから別のフラグメントへのコンテンツ遷移を使用するアプリに取り組んでいます。正常に動作していますが、宛先フラグメントには独自のアクティビティが必要であることに気付きました。

それでは、 Fragment 1 を含むActivity Aがあり、 Fragment 2を含むActivity Bがあるとしましょう。Fragment 1からFragment 2への共有要素遷移を実行する必要があります。

これまでに行ったことは次のとおりです。フラグメント1からアクティビティAへのコールバックメソッドで、選択したエンティティと、遷移元のイメージビューを渡しています。

活動A

 @Override
public void OnPhotographSelected(Photograph selectedPhoto,ImageView image) {
    Intent i= new Intent(this, PhotoDetailActivity.class);
    i.putExtra("photo_OBJ", selectedPhoto);
    i.putExtra("transitionName", image.getTransitionName());
    startActivity(i, ActivityOptions.makeSceneTransitionAnimation(this, image, "mainPhoto").toBundle());
}

アクティビティ B

 @Override
protected void onCreate(Bundle savedInstanceState) {
    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_photo_detail);
    Photograph photoObj=new Photograph();
    Bundle b = getIntent().getExtras();
    String transitionName="";
    if(b!=null)
    {
        photoObj=(Photograph)b.getSerializable("photo_OBJ");
        transitionName=b.getString("transitionName");
    }
    PhotoDetailFragment pdf = PhotoDetailFragment.newInstance(photoObj);
    pdf.setSharedElementReturnTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
    pdf.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
    pdf.setImageTransitionId(transitionName);
    FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
    trans.replace(R.id.photo_detail_content, pdf);
    trans.commit();
}

フラグメント 2

 mainImg.setTransitionName(mImageTransitionID);

活動テーマ

 <item name="android:windowActivityTransitions">true</item>

実行時にコンテンツの遷移が発生していません。前述したように、同じアクティビティ内でフラグメントからフラグメントへの移行が正しく機能していました。また、Fragment 1 は gridview であるため、transitionNames を自分で維持する必要があるため、それらはすべて一意であるため、実行時に setTransitionName 呼び出しが表示されます。

移行が実行されていない理由は何ですか?

4

1 に答える 1

3

でビューを作成した後、フラグメント内およびフラグメントpostponeEnterTransition()内の 2 番目のアクティビティで使用してみてください。onCreate()yourActivity.startPostponedEnterTransition()onViewCreated()

AppCompatを使用している場合はsupportPostponeEnterTransition()、 andsupportStartPostponedEnterTransition()またはActivityCompat.postponeEnterTransition(yourActivity)and を試してくださいActivityCompat.startPostponedEnterTransition(yourActivity)

クレジット: http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html

于 2016-03-02T08:43:08.860 に答える