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_容器获取当前片段。然后,你可以执行任何需要取消替换的比较。我认为,但是它需要比较片段的类型或名称,这不是最优雅的方法:/这是我昨天已经做过的,谢谢。