1

GridViewはの中にScrollViewCardViewsの中にScrollViewのラップされたものがあります。 GridViewsはスクロール可能ですが、GridViewの高さをコンテンツの高さに拡大しました。これは、GridView内の要素とその上の要素を両方ともスクロールしたいからです。私はこれが正しい方法をGridView使用していないことをよく知っていますが、私はこれを無視するように私自身の理由があります。ScrollViewを使用してフラグメントに戻ったときのAndroid共有要素の遷移

とにかく問題が共有要素(CardView)遷移ボタンを背面押しまたはIセットfragmentManager.popBackStack();

と断片化するために、フラグメントBから戻ってくるときに、フラグメントBに断片Aからつもりはなく、上に良好に作用するということですの値がCardViewsの値であり、Gridviewに使用されているCardViewのそれぞれの固有の値をプログラムで使用し、CardViewonClickメソッドにバンドル引数を指定してフラグメントBに渡します。次に、フラグメントBのonCreateViewメソッドでは、同じ値をCardView内部に設定します。

ここで私は断片Bに切り替えるためにそれを使用するコードです:

Fragment fragment = new FragmentB() 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      // Defines enter transition only for shared element 
      Transition changeBoundsTransition = TransitionInflater.from(mContext).inflateTransition(android.R.transition.move); 
      fragment.setSharedElementEnterTransition(changeBoundsTransition); 
      bundle.putString("transitionName", "card" + p.getId()); 
      fragment.setArguments(bundle); 
      fragmentManager.beginTransaction() 
        .replace(R.id.main_container_wrapper, fragment) 
        .addToBackStack("package_root") 
        .addSharedElement(cv, "card" + p.getId()) 
        .commit(); 

     } 

そしてここFragmentBのonCreateView方法だ:私は共有要素の遷移が起こっにうまく機能の上に述べたよう

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     String transitionName = getArguments().getString("transitionName"); 
     view.findViewById(R.id.cv_selected_package_card).setTransitionName(transitionName); 
} 

は、 FragmentBに返信しますが、返信時には返信しません。

FragmentAFragmentBから戻ってくるとリロードされ、それを離れるときと戻ってくるときのスクロールの状態が同じままで上から表示される理由が考えられます。しかし、ここではスクロールを主な問題にすることはできません。なぜなら、最初にスクロールせずにCardViewを選択しても、シェア要素の移行は戻ってきても機能しないからです。

ターゲットAPIのバージョンはAPIのバージョンを構築、25であることは25であり、私は、仮想デバイスのAndroid APIレベル25

私はこの問題を解決することができますどのように任意のアイデアでアプリをテストします。

+0

は、多分あなたは 'onBackPressed'をオーバーライド検討すべきです。 –

+0

@MehranZamaniとそれに何をしますか? 私は 'fragmentManager.popBackStack();'を呼び出すことでテストを行ったが、別のものを作っていなかった。 – Mehrdad

+0

あなたは何をしようとしているのか分かりません。おそらく 'notifyDataSetChanged'によって強制的に再描画の断片を作ります。 –

答えて

0

問題は、次のフラグメントに切り替えるために使用していたreplace()メソッドでした。これにより、フラグメントを破棄してフラグメントマネージャから削除し、必要に応じて再度追加します。ですから、これを防ぐために、add()メソッドを使用して次のフラグメントを追加し、hide()を使用して現在のフラグメントを隠しました。

ここでは、コードです:

Fragment currentFragment = fragmentManager.findFragmentById(R.id.main_container_wrapper); 
fragmentManager.beginTransaction() 
       .hide(currentFragment) 
       .add(R.id.main_container_wrapper, fragment) 
       .addToBackStack(null) 
       .addSharedElement(cv, "card" + p.getId()) 
       .commit(); 
関連する問題