5

フラグメントを置き換えながら、Android lollipop バージョンで利用可能なスライド アニメーションを使用しています。この特定の置換では期待どおりに機能しますが、戻るボタンを押すと、最初に現在のフラグメントがポップバックされ、次に入力アニメーションの逆 (スライドアウト) が実行されます。

private void replaceContentFrameByFragment(Fragment replaceBy, String replaceByFragmentTag) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Slide slide = new Slide(Gravity.BOTTOM);
            slide.setDuration(1000);
            replaceBy.setEnterTransition(slide);
    }
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.content_frame, replaceBy, replaceByFragmentTag);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commitAllowingStateLoss();
}

では、スライドの逆アニメーションが終了した後にのみフラグメントを強制的に戻すにはどうすればよいでしょうか? アクティビティにはメソッド finishAfterTransition() が用意されていることに気付きました。フラグメントに似たものはありますか?

4

2 に答える 2

2

私は同じ問題を抱えていました.Fragment BからのonReturn -> A、Fragment Bは余分なスライドトランジションを行っているようです. setReturnTransition()それを回避するために、スライドよりも短い時間のフェード トランジションを入れました。このコードは次のとおりです。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Slide slideRight = new Slide(Gravity.RIGHT);
    slideRight.setDuration(200);
    fragment.setEnterTransition(slideRight);
    Fade fade = new Fade();
    fade.setDuration(100);
    fragment.setReturnTransition(fade);
}
于 2015-06-04T21:33:52.343 に答える
0

私はほぼ同じパターンで同じ問題を抱えていましたが、フラグメントトランジションを投稿することで回避できました:

new Handler().post(new Runnable() {
    @Override
    public void run() {
        page.setEnterTransition(new Slide());
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.root_layout, page, "current")
                .commit();
    }
});

なぜこれが問題を解決するのか (またはこれが絶対的な正しい解決策であるかどうか) はわかりませんが、私にとってはうまくいきました。

于 2015-05-13T21:24:27.083 に答える