如何删除相同片段之间的动画?

How to remove animation between the same fragments?

我想在选择当前显示的片段时避免片段之间的过渡。

public boolean onSelect(View view, int index) {
    switch (view.getId()) {
        case R.id.toDiary:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                    R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                    new DiaryFragment()).addToBackStack("Diary").commit();
            break;
        case R.id.toForecast:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                    R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                    new ForecastFragment()).addToBackStack("Forecast").commit();
            break;
        case R.id.toCharts:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                    R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                    new ChartsFragment()).addToBackStack("Charts").commit();
            break;
        case R.id.toSettings:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                    R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                    new SettingsFragment()).addToBackStack("Settings").commit();
            break;
    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

动画 可以帮助您理解我的问题:

简而言之,当用户已经看到所选片段时,我不想看到动画。

我试图保留变量 currentLaunchedFragment 并检查用户是否选择了当前显示的片段,但问题是我使用 .addToBackStack("") 以便能够返回到先前显示的片段.问题是我找不到任何方法来实现 currentLaunchedFragment,同时单击后退按钮会产生另一种不需要的行为。

您可以尝试instanceof方法来检查当前片段:

Fragment currentFragment;
    public boolean onSelect(View view, int index) {
        switch (view.getId()) {
            case R.id.toDiary:
                if(currentFragment==null || !(currentFragment instanceof DiaryFragment)){
                    currentFragment= new DiaryFragment();
                    getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                            R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                            currentFragment).addToBackStack("Diary").commit();
                }

                break;
            case R.id.toForecast:
                if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
                    currentFragment= new ForecastFragment();
                    getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                            R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                            currentFragment).addToBackStack("Forecast").commit();
                }

                break;
            case R.id.toCharts:
                if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
                    currentFragment= new ChartsFragment();
                    getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                            R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                            currentFragment).addToBackStack("Charts").commit();
                }

                break;
            case R.id.toSettings:
                if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
                    currentFragment= new SettingsFragment();
                    getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                            R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
                            currentFragment).addToBackStack("Settings").commit();
                }

                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }