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

Android 如何删除相同片段之间的动画?,android,android-animation,navigation-drawer,Android,Android Animation,Navigation Drawer,当我选择当前显示的片段时,我希望避免片段之间的转换 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_lef

当我选择当前显示的片段时,我希望避免片段之间的转换

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;
    }

使用getSupportFragmentManager.findFragmentByIdR.id.fragment_容器获取当前片段。然后,你可以执行任何需要取消替换的比较。我认为,但是它需要比较片段的类型或名称,这不是最优雅的方法:/这是我昨天已经做过的,谢谢。