web-dev-qa-db-ja.com

フラグメントからアクティビティへの共有要素の移行方法

アクティビティのViewPager内に3つのフラグメントがあり、フラグメントの1つから別のアクティビティへの共有要素の遷移を実現したいと考えています。遷移は、アクティビティアクティビティ->ビューページ->フラグメント->リサイクラービュー内にあるビューページャー内にあるフラグメント内にあるリサイクラービューからのものです。

私はインターネットのあらゆる場所を検索しましたが、あるフラグメントから別のフラグメントへの共有要素の移行と、あるアクティビティから別のアクティビティに関する情報しかありません。フラグメントからアクティビティへの移行に関するコンテンツはありません

holder.poster.setTransitionName("posterX");
            ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) con,holder.poster,holder.poster.getTransitionName());
            Log.e("Animation", "Success");
            //startActivity((Activity) con,intent,options.toBundle());
            c.startActivity(intent,options.toBundle());

上記のコードを使用すると、2番目のアクティビティが起動しますが、何も表示されません。たとえば、2番目のアクティビティにはFABが含まれており、クリックするとyoutubeが起動します。 FABがどこにあるか知っているので、盲目的にクリックすると、YouTubeは正しく起動しましたが、2番目のアクティビティでは何も表示されません

D/ViewRootImpl: changeCanvasOpacity: opaque=true

そのlogcatsの1つ。これが問題だと思います!!

12
user3740778

同じ問題が発生しました。申し訳ありませんが、Fragment toFragmentまたはActivityto Activityの関係で作業できるのに、Fragment toActivityの関係が必要な理由を再検討する必要があります。

コードをFragmentto Fragmentリレーションに変更することで問題を解決しましたが、それに関するドキュメントと例がたくさんあります Shared Element Transitions

1
Carlos

私はついに答えを見つけました、startActivity呼び出しメソッドは異なります。あなたは電話する必要があります

startActivityFromFragment(fragment, intent, req_code, options.toBundle());

appCompactActivityから

2
Koma Yip

フラグメントはアクティビティ内にあるため、フラグメントからアクティビティはアクティビティからアクティビティと同じです。

1

私は以下のようにペアを使用すると思います:

 Pair[] pairs = new Pair[1];
            pairs[0] = new Pair<View, String>(tvArtifacts, "itemTrans");
            ActivityOptions options = null;
            if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop) {
                options = ActivityOptions.makeSceneTransitionAnimation(getActivity(), pairs);
            }

            Intent i = new Intent(getActivity(), ItemDetailActivity.class);
            i.putExtra("item_name", "item 2");
            if (options != null) {
                startActivity(i, options.toBundle());
            } else {
                startActivity(i);
            }

これは私のために働いた!ありがとう..

0
Brinda Rathod